summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Hommey <glandium@debian.org>2005-09-05 17:10:35 +0000
committerMike Hommey <glandium@debian.org>2005-09-05 17:10:35 +0000
commita464d9993e2acd5b8e1089b218ba74c6fcf215c5 (patch)
tree72fe00eb59147367a1d660b90d08172357e0dffc
parent112cb5bb5475afec1c1cbf1d6728ce4880d0fee8 (diff)
downloadlibxml2-a464d9993e2acd5b8e1089b218ba74c6fcf215c5.tar.gz
Load /usr/tmp/tmp.CMoFff/libxml2-2.6.21 intoupstream/2.6.21
packages/libxml2/branches/upstream/current.
-rw-r--r--ChangeLog613
-rw-r--r--HTMLparser.c102
-rw-r--r--HTMLtree.c4
-rw-r--r--Makefile.am56
-rw-r--r--Makefile.in66
-rw-r--r--NEWS39
-rw-r--r--SAX2.c69
-rwxr-xr-xconfigure246
-rw-r--r--configure.in98
-rw-r--r--debugXML.c24
-rw-r--r--doc/APIchunk0.html5
-rw-r--r--doc/APIchunk1.html1
-rw-r--r--doc/APIchunk10.html21
-rw-r--r--doc/APIchunk11.html4
-rw-r--r--doc/APIchunk12.html36
-rw-r--r--doc/APIchunk13.html39
-rw-r--r--doc/APIchunk14.html53
-rw-r--r--doc/APIchunk15.html46
-rw-r--r--doc/APIchunk16.html2
-rw-r--r--doc/APIchunk17.html9
-rw-r--r--doc/APIchunk18.html30
-rw-r--r--doc/APIchunk19.html19
-rw-r--r--doc/APIchunk2.html9
-rw-r--r--doc/APIchunk20.html5
-rw-r--r--doc/APIchunk21.html13
-rw-r--r--doc/APIchunk22.html9
-rw-r--r--doc/APIchunk23.html16
-rw-r--r--doc/APIchunk24.html34
-rw-r--r--doc/APIchunk25.html19
-rw-r--r--doc/APIchunk26.html20
-rw-r--r--doc/APIchunk27.html4
-rw-r--r--doc/APIchunk28.html9
-rw-r--r--doc/APIchunk29.html2
-rw-r--r--doc/APIchunk3.html7
-rw-r--r--doc/APIchunk4.html5
-rw-r--r--doc/APIchunk5.html1
-rw-r--r--doc/APIchunk6.html2
-rw-r--r--doc/APIchunk7.html39
-rw-r--r--doc/APIchunk8.html3
-rw-r--r--doc/APIchunk9.html4
-rw-r--r--doc/APIconstructors.html15
-rw-r--r--doc/APIfiles.html114
-rw-r--r--doc/APIfunctions.html60
-rw-r--r--doc/APIsymbols.html110
-rw-r--r--doc/Makefile.in2
-rw-r--r--doc/XSLT.html3
-rwxr-xr-xdoc/apibuild.py1
-rw-r--r--doc/downloads.html1
-rw-r--r--doc/elfgcchack.xsl1
-rw-r--r--doc/examples/Makefile.in2
-rw-r--r--doc/html/book1.html2
-rw-r--r--doc/html/index.html2
-rw-r--r--doc/html/libxml-HTMLparser.html2
-rw-r--r--doc/html/libxml-lib.html2
-rw-r--r--doc/html/libxml-parser.html46
-rw-r--r--doc/html/libxml-pattern.html11
-rw-r--r--doc/html/libxml-relaxng.html5
-rw-r--r--doc/html/libxml-schemasInternals.html2
-rw-r--r--doc/html/libxml-schematron.html77
-rw-r--r--doc/html/libxml-threads.html2
-rw-r--r--doc/html/libxml-tree.html2
-rw-r--r--doc/html/libxml-uri.html5
-rw-r--r--doc/html/libxml-xmlautomata.html5
-rw-r--r--doc/html/libxml-xmlerror.html11
-rw-r--r--doc/html/libxml-xmlexports.html3
-rw-r--r--doc/html/libxml-xmlregexp.html84
-rw-r--r--doc/html/libxml-xmlsave.html1
-rw-r--r--doc/html/libxml-xmlschemas.html5
-rw-r--r--doc/html/libxml-xmlversion.html6
-rw-r--r--doc/html/libxml-xpath.html5
-rw-r--r--doc/index.html3
-rw-r--r--doc/libxml2-api.xml545
-rw-r--r--doc/libxml2.xsa60
-rw-r--r--doc/news.html38
-rw-r--r--doc/xml.html47
-rw-r--r--doc/xmllint.14
-rw-r--r--doc/xmllint.xml9
-rw-r--r--elfgcchack.h473
-rw-r--r--encoding.c101
-rw-r--r--error.c32
-rw-r--r--example/Makefile.in2
-rw-r--r--globals.c10
-rw-r--r--include/Makefile.in2
-rw-r--r--include/libxml/HTMLparser.h4
-rw-r--r--include/libxml/Makefile.am3
-rw-r--r--include/libxml/Makefile.in5
-rw-r--r--include/libxml/SAX2.h2
-rw-r--r--include/libxml/parser.h55
-rw-r--r--include/libxml/pattern.h4
-rw-r--r--include/libxml/relaxng.h7
-rw-r--r--include/libxml/schematron.h124
-rw-r--r--include/libxml/threads.h1
-rw-r--r--include/libxml/tree.h54
-rw-r--r--include/libxml/uri.h9
-rw-r--r--include/libxml/valid.h4
-rw-r--r--include/libxml/xmlIO.h16
-rw-r--r--include/libxml/xmlautomata.h8
-rw-r--r--include/libxml/xmlerror.h23
-rw-r--r--include/libxml/xmlexports.h21
-rw-r--r--include/libxml/xmlregexp.h108
-rw-r--r--include/libxml/xmlsave.h3
-rw-r--r--include/libxml/xmlschemas.h7
-rw-r--r--include/libxml/xmlversion.h33
-rw-r--r--include/libxml/xmlversion.h.in23
-rw-r--r--include/libxml/xpath.h19
-rw-r--r--libxml.spec.in53
-rw-r--r--libxml2.spec59
-rw-r--r--nanoftp.c8
-rw-r--r--nanohttp.c33
-rw-r--r--parser.c287
-rw-r--r--parserInternals.c4
-rw-r--r--pattern.c129
-rw-r--r--python/Makefile.in2
-rwxr-xr-xpython/generator.py2
-rw-r--r--python/libxml.c7
-rw-r--r--python/libxml2-py.c369
-rwxr-xr-xpython/setup.py2
-rw-r--r--python/tests/Makefile.in2
-rwxr-xr-xpython/tests/tstLastError.py12
-rw-r--r--relaxng.c70
-rw-r--r--result/HTML/Down.html2
-rw-r--r--result/HTML/Down.html.sax6
-rw-r--r--result/HTML/attrents.html4
-rw-r--r--result/HTML/attrents.html.sax4
-rw-r--r--result/HTML/cf_128.html7
-rw-r--r--result/HTML/cf_128.html.sax4
-rw-r--r--result/HTML/doc2.htm4
-rw-r--r--result/HTML/doc2.htm.sax4
-rw-r--r--result/HTML/doc3.htm4
-rw-r--r--result/HTML/doc3.htm.sax6
-rw-r--r--result/HTML/fp40.htm3
-rw-r--r--result/HTML/fp40.htm.sax8
-rw-r--r--result/HTML/liclose.html6
-rw-r--r--result/HTML/liclose.html.sax4
-rw-r--r--result/HTML/pre.html4
-rw-r--r--result/HTML/pre.html.sax4
-rw-r--r--result/HTML/python.html3
-rw-r--r--result/HTML/python.html.sax2
-rw-r--r--result/HTML/reg1.html.sax4
-rw-r--r--result/HTML/reg2.html.sax4
-rw-r--r--result/HTML/reg3.html.sax6
-rw-r--r--result/HTML/reg4.html.sax8
-rw-r--r--result/HTML/script.html.sax6
-rw-r--r--result/HTML/script2.html16
-rw-r--r--result/HTML/script2.html.err0
-rw-r--r--result/HTML/script2.html.sax50
-rw-r--r--result/HTML/test2.html1
-rw-r--r--result/HTML/test2.html.sax4
-rw-r--r--result/HTML/test3.html2
-rw-r--r--result/HTML/test3.html.sax22
-rw-r--r--result/HTML/wired.html4
-rw-r--r--result/HTML/wired.html.sax26
-rw-r--r--result/ent2.sax1
-rw-r--r--result/ent2.sax21
-rw-r--r--result/ent7.sax1
-rw-r--r--result/ent7.sax21
-rw-r--r--result/expr/base85
-rw-r--r--result/regexp/*1
-rw-r--r--result/relaxng/307377_00
-rw-r--r--result/relaxng/307377_0.err2
-rw-r--r--result/relaxng/307377_10
-rw-r--r--result/relaxng/307377_1.err3
-rw-r--r--result/relaxng/307377_20
-rw-r--r--result/relaxng/307377_2.err1
-rw-r--r--result/relaxng/307377_err1
-rw-r--r--result/relaxng/307377_valid0
-rw-r--r--result/schemas/allsg_0_01
-rw-r--r--result/schemas/allsg_0_0.err0
-rw-r--r--result/schemas/allsg_0_11
-rw-r--r--result/schemas/allsg_0_1.err0
-rw-r--r--result/schemas/allsg_0_21
-rw-r--r--result/schemas/allsg_0_2.err0
-rw-r--r--result/schemas/allsg_0_31
-rw-r--r--result/schemas/allsg_0_3.err1
-rw-r--r--result/schemas/allsg_0_41
-rw-r--r--result/schemas/allsg_0_4.err1
-rw-r--r--result/schemas/allsg_0_51
-rw-r--r--result/schemas/allsg_0_5.err1
-rw-r--r--result/schemas/any3_0_0.err2
-rw-r--r--result/schemas/any5_0_01
-rw-r--r--result/schemas/any5_0_0.err1
-rw-r--r--result/schemas/any5_0_11
-rw-r--r--result/schemas/any5_0_1.err1
-rw-r--r--result/schemas/any5_0_21
-rw-r--r--result/schemas/any5_0_2.err1
-rw-r--r--result/schemas/any5_0_31
-rw-r--r--result/schemas/any5_0_3.err0
-rw-r--r--result/schemas/any5_0_41
-rw-r--r--result/schemas/any5_0_4.err1
-rw-r--r--result/schemas/any5_0_51
-rw-r--r--result/schemas/any5_0_5.err1
-rw-r--r--result/schemas/any5_0_61
-rw-r--r--result/schemas/any5_0_6.err1
-rw-r--r--result/schemas/any5_1_01
-rw-r--r--result/schemas/any5_1_0.err1
-rw-r--r--result/schemas/any5_1_11
-rw-r--r--result/schemas/any5_1_1.err1
-rw-r--r--result/schemas/any5_1_21
-rw-r--r--result/schemas/any5_1_2.err0
-rw-r--r--result/schemas/any5_1_31
-rw-r--r--result/schemas/any5_1_3.err1
-rw-r--r--result/schemas/any5_1_41
-rw-r--r--result/schemas/any5_1_4.err1
-rw-r--r--result/schemas/any5_1_51
-rw-r--r--result/schemas/any5_1_5.err0
-rw-r--r--result/schemas/any5_1_61
-rw-r--r--result/schemas/any5_1_6.err1
-rw-r--r--result/schemas/any6_1_01
-rw-r--r--result/schemas/any6_1_0.err0
-rw-r--r--result/schemas/any6_2_01
-rw-r--r--result/schemas/any6_2_0.err0
-rw-r--r--result/schemas/any7_1_01
-rw-r--r--result/schemas/any7_1_0.err1
-rw-r--r--result/schemas/any7_1_11
-rw-r--r--result/schemas/any7_1_1.err1
-rw-r--r--result/schemas/any7_1_21
-rw-r--r--result/schemas/any7_1_2.err0
-rw-r--r--result/schemas/any7_2_01
-rw-r--r--result/schemas/any7_2_0.err1
-rw-r--r--result/schemas/any7_2_11
-rw-r--r--result/schemas/any7_2_1.err1
-rw-r--r--result/schemas/any7_2_21
-rw-r--r--result/schemas/any7_2_2.err0
-rw-r--r--result/schemas/any8_1_01
-rw-r--r--result/schemas/any8_1_0.err0
-rw-r--r--result/schemas/bug303566_1_1.err2
-rw-r--r--result/schemas/bug310264_0_01
-rw-r--r--result/schemas/bug310264_0_0.err0
-rw-r--r--result/schemas/bug312957_1_01
-rw-r--r--result/schemas/bug312957_1_0.err1
-rw-r--r--result/schemas/bug313982_0_01
-rw-r--r--result/schemas/bug313982_0_0.err0
-rw-r--r--result/schemas/extension2_1_01
-rw-r--r--result/schemas/extension2_1_0.err0
-rw-r--r--result/schematron/zvon10_04
-rw-r--r--result/schematron/zvon10_0.err5
-rw-r--r--result/schematron/zvon10_15
-rw-r--r--result/schematron/zvon10_1.err6
-rw-r--r--result/schematron/zvon11_04
-rw-r--r--result/schematron/zvon11_0.err2
-rw-r--r--result/schematron/zvon11_14
-rw-r--r--result/schematron/zvon11_1.err3
-rw-r--r--result/schematron/zvon11_24
-rw-r--r--result/schematron/zvon11_2.err3
-rw-r--r--result/schematron/zvon11_34
-rw-r--r--result/schematron/zvon11_3.err2
-rw-r--r--result/schematron/zvon12_04
-rw-r--r--result/schematron/zvon12_0.err3
-rw-r--r--result/schematron/zvon12_14
-rw-r--r--result/schematron/zvon12_1.err2
-rw-r--r--result/schematron/zvon12_24
-rw-r--r--result/schematron/zvon12_2.err3
-rw-r--r--result/schematron/zvon13_07
-rw-r--r--result/schematron/zvon13_0.err3
-rw-r--r--result/schematron/zvon13_16
-rw-r--r--result/schematron/zvon13_1.err3
-rw-r--r--result/schematron/zvon13_26
-rw-r--r--result/schematron/zvon13_2.err2
-rw-r--r--result/schematron/zvon14_013
-rw-r--r--result/schematron/zvon14_0.err4
-rw-r--r--result/schematron/zvon15_05
-rw-r--r--result/schematron/zvon15_0.err4
-rw-r--r--result/schematron/zvon16_018
-rw-r--r--result/schematron/zvon16_0.err3
-rw-r--r--result/schematron/zvon1_04
-rw-r--r--result/schematron/zvon1_0.err8
-rw-r--r--result/schematron/zvon1_14
-rw-r--r--result/schematron/zvon1_1.err8
-rw-r--r--result/schematron/zvon2_05
-rw-r--r--result/schematron/zvon2_0.err2
-rw-r--r--result/schematron/zvon2_15
-rw-r--r--result/schematron/zvon2_1.err5
-rw-r--r--result/schematron/zvon2_26
-rw-r--r--result/schematron/zvon2_2.err3
-rw-r--r--result/schematron/zvon3_09
-rw-r--r--result/schematron/zvon3_0.err6
-rw-r--r--result/schematron/zvon4_07
-rw-r--r--result/schematron/zvon4_0.err3
-rw-r--r--result/schematron/zvon4_17
-rw-r--r--result/schematron/zvon4_1.err3
-rw-r--r--result/schematron/zvon5_06
-rw-r--r--result/schematron/zvon5_0.err7
-rw-r--r--result/schematron/zvon5_16
-rw-r--r--result/schematron/zvon5_1.err5
-rw-r--r--result/schematron/zvon5_28
-rw-r--r--result/schematron/zvon5_2.err5
-rw-r--r--result/schematron/zvon6_04
-rw-r--r--result/schematron/zvon6_0.err3
-rw-r--r--result/schematron/zvon6_14
-rw-r--r--result/schematron/zvon6_1.err3
-rw-r--r--result/schematron/zvon6_24
-rw-r--r--result/schematron/zvon6_2.err3
-rw-r--r--result/schematron/zvon7_04
-rw-r--r--result/schematron/zvon7_0.err3
-rw-r--r--result/schematron/zvon7_14
-rw-r--r--result/schematron/zvon7_1.err3
-rw-r--r--result/schematron/zvon7_24
-rw-r--r--result/schematron/zvon7_2.err3
-rw-r--r--result/schematron/zvon7_34
-rw-r--r--result/schematron/zvon7_3.err3
-rw-r--r--result/schematron/zvon7_44
-rw-r--r--result/schematron/zvon7_4.err3
-rw-r--r--result/schematron/zvon8_09
-rw-r--r--result/schematron/zvon8_0.err3
-rw-r--r--result/schematron/zvon8_18
-rw-r--r--result/schematron/zvon8_1.err3
-rw-r--r--result/schematron/zvon8_28
-rw-r--r--result/schematron/zvon8_2.err3
-rw-r--r--result/schematron/zvon9_08
-rw-r--r--result/schematron/zvon9_0.err2
-rw-r--r--result/schematron/zvon9_18
-rw-r--r--result/schematron/zvon9_1.err3
-rw-r--r--result/schematron/zvon9_28
-rw-r--r--result/schematron/zvon9_2.err3
-rw-r--r--result/valid/objednavka.xml39
-rw-r--r--result/valid/objednavka.xml.err0
-rw-r--r--result/xml2.sax1
-rw-r--r--result/xml2.sax21
-rw-r--r--runsuite.c12
-rw-r--r--runtest.c295
-rw-r--r--schematron.c1729
-rw-r--r--test/HTML/script2.html19
-rw-r--r--test/expr/base86
-rw-r--r--test/relaxng/307377.rng14
-rw-r--r--test/relaxng/307377_0.xml1
-rw-r--r--test/relaxng/307377_1.xml1
-rw-r--r--test/relaxng/307377_2.xml1
-rw-r--r--test/relaxng/docbook_0.xml3
-rw-r--r--test/schemas/.memdump4
-rw-r--r--test/schemas/allsg_0.xml7
-rw-r--r--test/schemas/allsg_0.xsd26
-rw-r--r--test/schemas/allsg_1.xml8
-rw-r--r--test/schemas/allsg_2.xml8
-rw-r--r--test/schemas/allsg_3.xml7
-rw-r--r--test/schemas/allsg_4.xml7
-rw-r--r--test/schemas/allsg_5.xml8
-rw-r--r--test/schemas/any5_0.xml7
-rw-r--r--test/schemas/any5_0.xsd13
-rw-r--r--test/schemas/any5_1.xml12
-rw-r--r--test/schemas/any5_1.xsd14
-rw-r--r--test/schemas/any5_2.xml8
-rw-r--r--test/schemas/any5_3.xml11
-rw-r--r--test/schemas/any5_4.xml12
-rw-r--r--test/schemas/any5_5.xml12
-rw-r--r--test/schemas/any5_6.xml13
-rwxr-xr-xtest/schemas/any6_0.xml8
-rw-r--r--test/schemas/any6_1.xsd36
-rw-r--r--test/schemas/any6_2.xsd19
-rwxr-xr-xtest/schemas/any7_0.xml19
-rwxr-xr-xtest/schemas/any7_1.xml18
-rwxr-xr-xtest/schemas/any7_1.xsd13
-rw-r--r--test/schemas/any7_2.xml20
-rwxr-xr-xtest/schemas/any7_2.xsd13
-rw-r--r--test/schemas/any8_0.xml9
-rw-r--r--test/schemas/any8_1.xsd20
-rw-r--r--test/schemas/bug310264_0.xml41
-rw-r--r--test/schemas/bug310264_0.xsd18
-rw-r--r--test/schemas/bug312957_0.xml14
-rw-r--r--test/schemas/bug312957_1.xsd39
-rw-r--r--test/schemas/bug313982_0.xml4
-rw-r--r--test/schemas/bug313982_0.xsd11
-rw-r--r--test/schemas/extension2_0.xml4
-rw-r--r--test/schemas/extension2_1.xsd17
-rw-r--r--test/schematron/.memdump4
-rw-r--r--test/schematron/zvon1.sct23
-rw-r--r--test/schematron/zvon10.sct15
-rw-r--r--test/schematron/zvon10_0.xml3
-rw-r--r--test/schematron/zvon10_1.xml4
-rw-r--r--test/schematron/zvon11.sct8
-rw-r--r--test/schematron/zvon11_0.xml3
-rw-r--r--test/schematron/zvon11_1.xml3
-rw-r--r--test/schematron/zvon11_2.xml3
-rw-r--r--test/schematron/zvon11_3.xml3
-rw-r--r--test/schematron/zvon12.sct8
-rw-r--r--test/schematron/zvon12_0.xml3
-rw-r--r--test/schematron/zvon12_1.xml3
-rw-r--r--test/schematron/zvon12_2.xml3
-rw-r--r--test/schematron/zvon13.sct7
-rw-r--r--test/schematron/zvon13_0.xml6
-rw-r--r--test/schematron/zvon13_1.xml5
-rw-r--r--test/schematron/zvon13_2.xml5
-rw-r--r--test/schematron/zvon14.sct10
-rw-r--r--test/schematron/zvon14_0.xml12
-rw-r--r--test/schematron/zvon15.sct11
-rw-r--r--test/schematron/zvon15_0.xml4
-rw-r--r--test/schematron/zvon16.sct30
-rw-r--r--test/schematron/zvon16_0.xml19
-rw-r--r--test/schematron/zvon1_0.xml3
-rw-r--r--test/schematron/zvon1_1.xml3
-rw-r--r--test/schematron/zvon2.sct9
-rw-r--r--test/schematron/zvon2_0.xml4
-rw-r--r--test/schematron/zvon2_1.xml4
-rw-r--r--test/schematron/zvon2_2.xml5
-rw-r--r--test/schematron/zvon3.sct8
-rw-r--r--test/schematron/zvon3_0.xml8
-rw-r--r--test/schematron/zvon4.sct10
-rw-r--r--test/schematron/zvon4_0.xml6
-rw-r--r--test/schematron/zvon4_1.xml6
-rw-r--r--test/schematron/zvon5.sct12
-rw-r--r--test/schematron/zvon5_0.xml5
-rw-r--r--test/schematron/zvon5_1.xml5
-rw-r--r--test/schematron/zvon5_2.xml7
-rw-r--r--test/schematron/zvon6.sct8
-rw-r--r--test/schematron/zvon6_0.xml3
-rw-r--r--test/schematron/zvon6_1.xml3
-rw-r--r--test/schematron/zvon6_2.xml3
-rw-r--r--test/schematron/zvon7.sct9
-rw-r--r--test/schematron/zvon7_0.xml3
-rw-r--r--test/schematron/zvon7_1.xml3
-rw-r--r--test/schematron/zvon7_2.xml3
-rw-r--r--test/schematron/zvon7_3.xml3
-rw-r--r--test/schematron/zvon7_4.xml3
-rw-r--r--test/schematron/zvon8.sct10
-rw-r--r--test/schematron/zvon8_0.xml8
-rw-r--r--test/schematron/zvon8_1.xml7
-rw-r--r--test/schematron/zvon8_2.xml7
-rw-r--r--test/schematron/zvon9.sct9
-rw-r--r--test/schematron/zvon9_0.xml7
-rw-r--r--test/schematron/zvon9_1.xml7
-rw-r--r--test/schematron/zvon9_2.xml7
-rw-r--r--test/valid/dtds/objednavka.dtd23
-rw-r--r--test/valid/objednavka.xml39
-rw-r--r--testC14N.c4
-rw-r--r--testHTML.c12
-rw-r--r--testReader.c12
-rw-r--r--testRegexp.c276
-rw-r--r--testSAX.c22
-rw-r--r--testThreads.c6
-rw-r--r--testXPath.c4
-rw-r--r--testapi.c766
-rw-r--r--threads.c2
-rw-r--r--tree.c210
-rw-r--r--uri.c175
-rw-r--r--valid.c109
-rw-r--r--win32/Makefile.msvc2
-rw-r--r--win32/configure.js10
-rw-r--r--win32/libxml2.def.src95
-rw-r--r--xinclude.c14
-rw-r--r--xml2-config.in1
-rw-r--r--xmlIO.c3
-rw-r--r--xmllint.c218
-rw-r--r--xmlmodule.c4
-rw-r--r--xmlreader.c284
-rw-r--r--xmlregexp.c2243
-rw-r--r--xmlsave.c116
-rw-r--r--xmlschemas.c1871
-rw-r--r--xmlschemastypes.c138
-rw-r--r--xmlstring.c2
-rw-r--r--xmlunicode.c4
-rw-r--r--xmlwriter.c38
-rw-r--r--xpath.c94
-rw-r--r--xpointer.c2
-rw-r--r--xstc/Makefile.in2
453 files changed, 13784 insertions, 2149 deletions
diff --git a/ChangeLog b/ChangeLog
index 3ff031e..6b29e3c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,616 @@
+Sun Sep 4 23:36:45 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * NEWS elfgcchack.h testapi.c doc/*: updated the docs and rebuild
+ releasing 2.6.21
+ * include/libxml/threads.h threads.c: removed xmlIsThreadsEnabled()
+ * threads.c include/libxml/threads.h xmllint.c: added the more
+ generic xmlHasFeature() as suggested by Bjorn Reese, xmllint uses it.
+
+Sun Sep 4 22:45:49 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in doc/* configure.in: prepare for release
+ * xpath.c: work for #303289, fix a formatting bug for MIN_INT
+
+Sun Sep 4 15:48:57 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: real fix for #314881 and #314759 is was a bit more complex
+ than initially expected as ctxt->error == NULL had behaviour side
+ effects at the compilation level itself.
+
+Sun Sep 4 14:01:00 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * pattern.c xpath.c include/libxml/pattern.h: fixing yet another
+ pattern induced XPath bug #314282
+ * relaxng.c: reverted back last change it was seriously broken
+
+Sat Sep 3 16:51:55 CEST 2005 Rob Richards <rrichards@ctindustries.net>
+
+ * xmlsave.c: check for NULL to prevent crash with meta elements
+
+Sat Sep 3 16:26:55 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: structured error reporting problem with Relax-NG
+ should fix #314881 and #314759
+
+Sat Sep 3 15:42:29 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * pattern.c: fixes a portability problem raised by C370 on Z/OS
+
+Sat Sep 3 15:26:31 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c tree.c valid.c: fixing a number of issues raised by xml:id
+ but more generally related to attributes and ID handling, fixes
+ #314358 among other things
+
+Fri Sep 2 14:26:43 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c parserInternals.c: avoid passing a char[] as snprintf
+ first argument.
+ * threads.c include/libxml/threads.h: implemented xmlIsThreadsEnabled()
+ based on Andrew W. Nosenko idea.
+ * doc/* elfgcchack.h: regenerated the API
+
+Thu Sep 1 14:44:42 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: the use of AM_PATH_PYTHON is not portable enough
+ reverting back to AM_PATH_PROG
+
+Thu Sep 1 11:42:39 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: Applied the last patch from Gary Coady for #304637
+ changing the behaviour when text nodes are found in body
+ * result/HTML/*: this changes the output of some tests
+
+Thu Sep 1 11:22:37 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * doc/downloads.html doc/xml.html: adding reference to Bull AIX rpms
+ c.f. #160598
+
+Wed Aug 31 11:39:02 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xml2-config.in: removed the obsolete --libtool-libs option, c.f.
+ bug #314853
+
+Fri Aug 26 17:33:26 CEST 2005 Rob Richards <rrichards@ctindustries.net>
+
+ * xmlsave.c: move handling of meta element for http-equiv in XHTML docs
+ to serialization and no longer modify internal tree.
+
+Fri Aug 26 00:51:58 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * libxml.spec.in: the profiling usually don't work, disabled
+ * doc/*: rebuilt
+
+Thu Aug 25 23:47:55 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: trying to fix the first part of #310033 by
+ detecting gcc <= 3.2
+
+Thu Aug 25 22:13:37 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * error.c: fixed bug #310033, the URI extraction code given a
+ node is a bit twisted and broke in the last months.
+
+Thu Aug 25 16:18:15 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c result/XPath/xptr/strrange2: uninitialized field and
+ fix on test.
+
+Thu Aug 25 16:03:05 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * debugXML.c: change verbosity depending on API
+ * result/XPath/tests/* result/XPath/xptr/* result/xmlid/*: get back
+ to previous outputs
+
+Thu Aug 25 15:14:56 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c parser.c SAX2.c debugXML.c tree.c valid.c xmlreader.c
+ xmllint.c include/libxml/HTMLparser.h include/libxml/parser.h:
+ added a parser XML_PARSE_COMPACT option to allocate small
+ text nodes (less than 8 bytes on 32bits, less than 16bytes on 64bits)
+ directly within the node, various changes to cope with this.
+ * result/XPath/tests/* result/XPath/xptr/* result/xmlid/*: this
+ slightly change the output
+
+Thu Aug 25 12:16:26 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: patch from Andrew W. Nosenko, use se $GCC = 'yes'
+ instead of $CC = 'gcc' because GCC may have a different name
+
+Thu Aug 25 00:18:20 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: changes the way the python binary is found, should
+ also fix bug #308004
+
+Wed Aug 24 16:44:41 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: found another bug while looking at #309616 on missing
+ entities.
+ * result/ent2.sax* result/ent7.sax* result/xml2.sax*: this changed the
+ SAX stream in missing conditions for a few tests
+
+Wed Aug 24 16:19:00 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c: applied the patch suggested #309565 which can avoid
+ looping in error conditions.
+
+Wed Aug 24 16:04:17 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c tree.c: line numbers are now carried by most nodes, fixing
+ xmlGetLineNo() c.f. bug #309205
+
+Wed Aug 24 14:43:34 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * encoding.c error.c include/libxml/xmlerror.h: finally converted
+ the encoding module to the common error reporting mechanism
+ * doc/* doc/html/libxml-xmlerror.html: rebuilt
+
+Wed Aug 24 11:35:26 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xpath.c: removed a potentially uninitialized variable error
+ * python/generator.py: fixed a deprecation warning
+ * python/tests/tstLastError.py: silent the damn test when Okay !
+
+Wed Aug 24 00:11:16 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * SAX2.c globals.c runtest.c testC14N.c testapi.c tree.c
+ include/libxml/SAX2.h include/libxml/xmlregexp.h: fixed compilation
+ when configured --without-sax1 and other cleanups fixes bug #172683
+ * doc/* elfgcchack.h: regenerated
+
+Tue Aug 23 20:05:05 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: fixed bug #170489 reported by Jirka Kosek
+ * test/valid/objednavka.xml test/valid/dtds/objednavka.dtd
+ result/valid/objednavka*: added the test to the regression suite.
+
+Tue Aug 23 18:04:08 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c include/libxml/HTMLparser.h: added a recovery mode
+ for the HTML parser based on the suggestions of bug #169834 by
+ Paul Loberg
+
+Tue Aug 23 15:38:46 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * elfgcchack.h testapi.c doc/*: regenerated
+ * schematron.c: fixed a compilation problem
+ * xmlregexp.c include/libxml/xmlregexp.h: some cleanups and one bug fix
+ * result/expr/base: slightly changes the number of Cons.
+
+Mon Aug 22 23:19:50 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * elfgcchack.h testapi.c doc/*: rescanned code and rebuilt
+ * xmlregexp.c: small cleanup
+ * include/libxml/schematron.h include/libxml/xmlexports.h
+ include/libxml/xmlversion.h.in: cleanup problems from code scanner
+
+Mon Aug 22 18:00:18 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: applied patch from Kuba Nowakowski fixing bug
+ #313982
+ * result/schemas/bug313982* test/schemas/bug313982*: also added
+ the test case to the regression suite.
+
+Mon Aug 22 17:50:20 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * testRegexp.c: printed the wrong string
+
+Mon Aug 22 16:42:07 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * testRegexp.c xmlregexp.c include/libxml/xmlregexp.h: exported
+ xmlExpExpDerive(), added it to the testRegexp command line
+ tool when providing multiple expressions.
+
+Mon Aug 22 14:57:13 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am result/expr/base test/expr/base: added the first
+ regression test suite set for the new expression support
+
+Mon Aug 22 13:49:18 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: fixed an uninitialized variable
+ * xmlregexp.c include/libxml/xmlregexp.h: extended the API to
+ add the parser, serializer and some debugging
+ * include/libxml/xmlversion.h.in: made the new support compiled
+ by default if Schemas is included
+ * testRegexp.c: cleanup and integration of the first part of the
+ new code with a special switch
+ * xmllint.c: show up Expr in --version if compiled in
+ * include/libxml/tree.h: moved the xmlBuffer definition up
+
+Mon Aug 22 12:11:10 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
+
+ * xmlschemas.c: Some preparation for the creation of a graph
+ of imported/included/redefined schemas; this is needed for
+ at least the redefinitions.
+ Centralized the creation of the parser context in one function.
+
+Mon Aug 22 02:19:33 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c include/libxml/xmlregexp.h: pushing the formal expression
+ handling code to have it in CVs from now. Not plugged, and misses
+ APIs it's not compiled in yet.
+
+Sat Aug 20 23:13:27 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: applied another patch from Rob Richards to fix
+ xmlTextReaderGetAttributeNs and xmlTextReaderMoveToAttributeNs
+
+Wed Aug 17 09:06:33 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: applied patch from Rob Richards to fix
+ xmlTextReaderGetAttribute behaviour with namespace declarations
+
+Fri Aug 12 14:12:56 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
+
+ * xmlschemas.c include/libxml/xmlerror.h:
+ Changed output for keyref-match errors; the target-node will
+ be now reported rather than the scope-node of the keyref
+ definition - allowing easier chasing of instance errors.
+ This was reported by Guy Fabrice to the mailing list.
+ Some initial parsing code for schema redefinitions.
+ * result/schemas/bug303566_1_1.err
+ result/schemas/bug312957_1_0.err: Adapted test results due
+ to the keyref changes.
+
+Fri Aug 12 12:17:52 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * valid.c: applied patch from Derek Poon fixing bug #310692
+
+Wed Aug 10 23:39:02 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: fix for bug #312945 as pointed by Dean Hill, the
+ context type was not always properly initialized.
+
+Wed Aug 10 18:21:41 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * relaxng.c: fixed bug #307377 about validation of choices in
+ list values.
+ * test/relaxng/307377* result/relaxng/307377* Makefile.am runtest.c:
+ added examples to the regression tests, problem is that streaming
+ version gives slightly more informations.
+
+Wed Aug 10 15:25:53 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xinclude.c: fixed bug #302302, nasty but the fix is rather simple.
+
+Wed Aug 10 11:59:46 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
+
+ * result/schemas/any6_1_0*: Added missing test results.
+
+Tue Aug 9 23:37:22 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c: fixed a determinism detection problem exposed by
+ ##other tests commited by Kasimier, also added a small speedup
+ of determinism detection.
+ * test/results/any6_2_0* any8_1_0* any7_1_2* any7_2_2*: added
+ the results to the regression tests now
+
+Tue Aug 9 15:54:09 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
+
+ * test/schemas/any7_2.xml test/schemas/any6_2.xsd
+ test/schemas/any8_1.xsd test/schemas/any8_0.xml:
+ Added some more tests for element wildcards.
+
+Tue Aug 9 14:22:47 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
+
+ * xmlschemas.c: Fixed #312957 reported by Carol Hunter:
+ streaming XPath states were not popped in every case,
+ thus failed to resolve correctly for subsequent input.
+ * test/schemas/bug312957* result/schemas/bug312957*:
+ Added the test submitted by Carol Hunter.
+
+Tue Aug 9 13:07:27 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c xmlschemas.c: trying to nail down the remaining
+ ##other issues
+ * result/schemas/any7* test/schemas/any7: completed the tests
+ and added the results
+ * result/schemas/any3_0_0.err result/schemas/any5_0_0.err
+ result/schemas/any5_1_0.err: this slightly chnages the output
+ from 3 existing tests
+
+Mon Aug 8 22:33:08 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * nanoftp.c nanohttp.c xmlschemastypes.c: applied patch from
+ Marcus Boerger to remove warnings on Windows.
+
+Mon Aug 8 16:43:04 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlsave.c include/libxml/xmlsave.h: fixed #145092 by adding
+ an xmlSaveOption to omit XML declaration
+
+Mon Aug 8 15:44:54 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLtree.c: fixed bug #310333 with a patch close to the provided
+ patch for HTML UTF-8 serialization
+ * result/HTML/script2.html: this changed the output of that test
+
+Mon Aug 8 15:01:51 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c: fixed bug #310264, basically it's about reentrancy
+ of count based transition, when going though the counter must
+ be reset to 0
+ * test/schemas/bug310264* result/schemas/bug310264*: added the
+ regression test.
+
+Mon Aug 8 14:40:52 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
+
+ * xmlschemas.c: Fixed a memory leak: xmlSchemaFreeAnnot() was
+ only freeing the first annotation in the list.
+
+Mon Aug 8 09:44:34 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlreader.c: applied patch from Rob Richards fixing
+ xmlTextReaderGetAttribute
+
+Mon Aug 8 01:41:53 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: fixed an uninitialized memory access spotted by
+ valgrind
+
+Sun Aug 7 12:39:35 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * test/relaxng/docbook_0.xml: get rid of the dependancy on a locally
+ installed DTD
+ * uri.c include/libxml/uri.h xmlIO.c nanoftp.c nanohttp.c: try to
+ cleanup the Path/URI conversion mess, needed fixing in various
+ layers and a new API to the uri module which also fixes #306861
+ * runtest.c: integrated a regression test specific to check the
+ URI conversions done before calling the I/O handlers.
+
+Sat Aug 6 11:06:24 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * doc/XSLT.html doc/xml.html: small doc fix for #312647
+
+Tue Aug 2 13:26:42 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * win32/configure.js: applied patch from Rob Richards to allow
+ disabling modules in win32, fixes #304071
+
+Mon Aug 1 07:18:53 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c: applied fix from Jakub Piotr Clapa for
+ xmlAttr.parent(), closing #312181
+
+Sun Jul 31 18:48:55 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * schematron.c: report improvement
+ * test/schematron/zvon* result/schematron/zvon*: more tests
+
+Sun Jul 31 16:02:59 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * win32/Makefile.msvc win32/configure.js: applied patch from Rob
+ Richards to add schematron to the build on Windows
+ * test/schematron/zvon3* result/schematron/zvon3*: second test
+ * test/schematron/zvon10* result/schematron/zvon10*: this is the
+ real second test 10 and 2 are swapped.
+
+Sun Jul 31 15:42:31 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * schematron.c: more bug fixes, improve the error reporting.
+ * test/schematron/zvon2* result/schematron/zvon2*: second test
+
+Sun Jul 31 14:15:31 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * schematron.c xmllint.c: fixing the loop bug, fixing schematron
+ text error rendering
+ * Makefile.am result/schematron/* test/schematron/zvon1*.sct:
+ started integrating within "make tests"
+
+Sat Jul 30 17:26:58 EDT 2005 Daniel Veillard <daniel@veillard.com>
+
+ * test/schematron/*: a few first tests from Zvon unfortunately
+ with the old syntax
+
+Sat Jul 30 17:08:07 EDT 2005 Daniel Veillard <daniel@veillard.com>
+
+ * schematron.c xmllint.c include/libxml/schematron.h: commiting
+ work done on the plane last week-end
+
+Sat Jul 30 15:16:29 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * runtest.c: allows an extra argument to subset the tests
+ * xmlregexp.c: big speedup for validation, basically avoided
+ transition creation explosion when removing epsilon transition
+
+Sat Jul 30 00:00:46 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * Makefile.am globals.c parserInternals.c xmlreader.c xmlunicode.c
+ xmlwriter.c: more cleanups based on sparse reports, added
+ "make sparse"
+
+Fri Jul 29 12:11:25 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * python/libxml.c: don't output any message on failed resolver lookups,
+ better done by the python user provided resolver layer.
+
+Fri Jul 29 01:48:02 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c SAX2.c encoding.c globals.c parser.c relaxng.c
+ runsuite.c runtest.c schematron.c testHTML.c testReader.c
+ testRegexp.c testSAX.c testThreads.c valid.c xinclude.c xmlIO.c
+ xmllint.c xmlmodule.c xmlschemas.c xpath.c xpointer.c: a lot of
+ small cleanups based on Linus' sparse check output.
+
+Thu Jul 28 21:28:33 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * include/libxml/Makefile.am: added schematron.h, oops ...
+
+Thu Jul 28 02:38:21 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
+
+ * xmlschemastypes.c: Added creation of the content type of
+ xs:anyType. This is needed when trying to extend xs:anyType
+ (although it makes no sense to extend it; IMHO the schema
+ people should have ruled this out). This was reported
+ by Yong Chen to the mailing list.
+ * xmlschemas.c: Fixed handling of xs:anyType in
+ xmlSchemaCheckCOSCTExtends() (reported by Young Chen). Tiny
+ adjustment to an error report output.
+ * test/schemas/extension2* result/schemas/extension2*:
+ Added a test case provided by Young Chen.
+
+Mon Jul 25 11:41:18 PDT 2005 William Brack <wbrack@mmm.com.hk>
+
+ * uri.c: enhanced xmlBuildRelativeURI to allow the URI and the
+ base to be in "relative" form
+
+Sun Jul 24 10:25:41 EDT 2005 Daniel Veillard <daniel@veillard.com>
+
+ * schematron.c xmllint.c: started adding schematron to the xmllint
+ tool, the report infrastructure is gonna be fun.
+
+Sat Jul 23 23:23:51 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
+
+ * test/schemas/any6* test/schemas/any7*: Added regression tests
+ (they fail currently), but did not added results yet.
+
+Sat Jul 23 23:07:05 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
+
+ * xmlschemas.c: Removed the workaround code in
+ xmlSchemaValidateElemWildcard() for the <any> wildcard
+ with namespace == ##other. Support for such wildcards was
+ implemented by Daniel at the automaton level recently, and
+ the workaround code iterfered with it.
+
+Sat Jul 23 10:55:50 EDT 2005 Daniel Veillard <daniel@veillard.com>
+
+ * pattern.c include/libxml/pattern.h: changed xmlPatterncompile
+ signature to pass an int and not an enum since it can generate
+ ABI compat troubles.
+ * include/libxml/schematron.h schematron.c: adding the new
+ schematron code, work in progress lots to be left and needing
+ testing
+ * include/libxml/xmlversion.h.in include/libxml/xmlwin32version.h.in
+ Makefile.am configure.in: integration of schematron into the
+ build
+ * xpath.c include/libxml/xpath.h: adding flags to control compilation
+ options right now just XML_XPATH_CHECKNS.
+
+Sat Jul 23 16:39:35 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
+
+ * xmlschemas.c: Removed an "internal error" message from
+ xmlSchemaBuildAContentModel() when an empty model group
+ definition is hit.
+
+Sat Jul 23 00:34:07 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
+
+ * pattern.c: Changed xmlCompileStepPattern() and
+ xmlCompileAttributeTest() to handle the "xml" prefix without
+ caring if the XML namespace was supplied by the user.
+
+Fri Jul 22 00:08:43 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
+
+ * xmlschemas.c: Fixed xmlSchemaPSimpleTypeErr(), which did not
+ output the given string arguments correctly.
+
+Thu Jul 21 09:21:00 EDT 2005 Daniel Veillard <daniel@veillard.com>
+
+ * error.c globals.c parser.c runtest.c testHTML.c testSAX.c
+ threads.c valid.c xmllint.c xmlreader.c xmlschemas.c xmlstring.c
+ xmlwriter.c include/libxml/parser.h include/libxml/relaxng.h
+ include/libxml/valid.h include/libxml/xmlIO.h
+ include/libxml/xmlerror.h include/libxml/xmlexports.h
+ include/libxml/xmlschemas.h: applied a patch from Marcus Boerger
+ to fix problems with calling conventions on Windows this should
+ fix #309757
+
+Wed Jul 20 14:45:39 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * parser.c: an optimization of the char data inner loop,
+ can gain up to 10% in pure SAX2 parsing speed
+ * xmlschemas.c: applied patch from Kupriyanov Anatolij fixing
+ a bug in XML Schemas facet comparison #310893
+
+Tue Jul 19 17:27:26 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c xmlschemas.c: fixed the error reporting for
+ not transitions
+ * result/schemas/any5_0_0* result/schemas/any5_0_2*
+ result/schemas/any5_1_0*: fixed output
+
+Tue Jul 19 15:34:12 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h: fixing
+ bug #172215 about foreign namespaces by adding support for
+ negated string transitions. Error messages still need to be
+ improved.
+ * test/schemas/any5* result/schemas/any5*: adding regression
+ tests for this.
+
+Tue Jul 19 12:33:31 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * tree.c: applied patch from Alexander Pohoyda fixing xmlGetNodePath
+ on namespaced attributes #310417.
+
+Mon Jul 18 23:01:15 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * doc/xmllint.1 doc/xmllint.html doc/xmllint.xml: --nonet was
+ ducplicated
+
+Mon Jul 18 20:49:28 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: fixed xsd:all when used in conjunction with
+ substitution groups
+ * test/schemas/allsg_* result/schemas/allsg_*: adding specific
+ regression tests, strangely missing from NIST/Sun/Microsoft
+ testsuites
+
+Sun Jul 17 07:11:27 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemas.c: fixed bug #307508, a bad automata was built but
+ this showed as an indeterminist result
+
+Thu Jul 14 17:53:02 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * xmlschemastypes.c: found the last bug raised by NIST tests in
+ comparing base64 strings, result from runsuite:
+ ## NIST test suite for Schemas version NIST2004-01-14
+ Ran 23170 tests (3953 schemata), no errors
+
+Thu Jul 14 14:57:36 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * testRegexp.c: fixed where xmlMemoryDump() should be called.
+ * xmlregexp.c: fixed handling of {0}, \n, \r and \t, two bugs
+ affecting NIST regression tests
+
+Thu Jul 14 11:30:24 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * configure.in: applied a patch from Gerrit P. Haase to add
+ module support on cygwin
+
+Thu Jul 14 10:56:42 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: fixed a potential buffer overrun error introduced
+ on last commit to htmlParseScript() c.f. #310229
+
+Thu Jul 14 23:48:17 PDT 2005 William Brack <wbrack@mmm.com.hk>
+
+ * xpath.c: Changed the behaviour of xmlXPathEqualNodeSetFloat to
+ return TRUE if a nodeset with a numeric value of NaN is compared
+ for inequality with any numeric value (bug 309914).
+
+Thu Jul 14 01:03:03 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * error.c relaxng.c xmlreader.c xmlschemas.c include/libxml/relaxng.h
+ include/libxml/xmlschemas.h: applied patch from Marcus Boerger
+ to route relaxng and schemas error messages when using the reader
+ through the structured interface if activated.
+ * elfgcchack.h doc/* testapi.c: rebuilt since this add new APIs
+ to test.
+
+Wed Jul 13 18:35:47 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * HTMLparser.c: applied UTF-8 script parsing bug #310229 fix from
+ Jiri Netolicky
+ * result/HTML/script2.html* test/HTML/script2.html: added the test
+ case from the regression suite
+
+Tue Jul 12 17:08:11 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * nanohttp.c: fixed bug #310105 with http_proxy environments with
+ patch provided by Peter Breitenlohner
+
Mon Jul 11 00:28:10 CEST 2005 Daniel Veillard <daniel@veillard.com>
* Makefile.am NEWS configure.in doc/*: preparing release 2.6.20
diff --git a/HTMLparser.c b/HTMLparser.c
index c6115d0..d11ae08 100644
--- a/HTMLparser.c
+++ b/HTMLparser.c
@@ -192,16 +192,16 @@ htmlnamePop(htmlParserCtxtPtr ctxt)
const xmlChar *ret;
if (ctxt->nameNr <= 0)
- return (0);
+ return (NULL);
ctxt->nameNr--;
if (ctxt->nameNr < 0)
- return (0);
+ return (NULL);
if (ctxt->nameNr > 0)
ctxt->name = ctxt->nameTab[ctxt->nameNr - 1];
else
ctxt->name = NULL;
ret = ctxt->nameTab[ctxt->nameNr];
- ctxt->nameTab[ctxt->nameNr] = 0;
+ ctxt->nameTab[ctxt->nameNr] = NULL;
return (ret);
}
@@ -964,7 +964,6 @@ NULL
static const char *htmlNoContentElements[] = {
"html",
"head",
- "body",
NULL
};
@@ -2042,6 +2041,7 @@ static int areBlanks(htmlParserCtxtPtr ctxt, const xmlChar *str, int len) {
unsigned int i;
int j;
xmlNodePtr lastChild;
+ xmlDtdPtr dtd;
for (j = 0;j < len;j++)
if (!(IS_BLANK_CH(str[j]))) return(0);
@@ -2054,8 +2054,17 @@ static int areBlanks(htmlParserCtxtPtr ctxt, const xmlChar *str, int len) {
return(1);
if (xmlStrEqual(ctxt->name, BAD_CAST"head"))
return(1);
- if (xmlStrEqual(ctxt->name, BAD_CAST"body"))
- return(1);
+
+ /* Only strip CDATA children of the body tag for strict HTML DTDs */
+ if (xmlStrEqual(ctxt->name, BAD_CAST "body") && ctxt->myDoc != NULL) {
+ dtd = xmlGetIntSubset(ctxt->myDoc);
+ if (dtd != NULL && dtd->ExternalID != NULL) {
+ if (!xmlStrcasecmp(dtd->ExternalID, BAD_CAST "-//W3C//DTD HTML 4.01//EN") ||
+ !xmlStrcasecmp(dtd->ExternalID, BAD_CAST "-//W3C//DTD HTML 4//EN"))
+ return(1);
+ }
+ }
+
if (ctxt->node == NULL) return(0);
lastChild = xmlGetLastChild(ctxt->node);
while ((lastChild) && (lastChild->type == XML_COMMENT_NODE))
@@ -2627,12 +2636,12 @@ htmlParsePubidLiteral(htmlParserCtxtPtr ctxt) {
*/
static void
htmlParseScript(htmlParserCtxtPtr ctxt) {
- xmlChar buf[HTML_PARSER_BIG_BUFFER_SIZE + 1];
+ xmlChar buf[HTML_PARSER_BIG_BUFFER_SIZE + 5];
int nbchar = 0;
- xmlChar cur;
+ int cur,l;
SHRINK;
- cur = CUR;
+ cur = CUR_CHAR(l);
while (IS_CHAR_CH(cur)) {
if ((cur == '<') && (NXT(1) == '!') && (NXT(2) == '-') &&
(NXT(3) == '-')) {
@@ -2648,20 +2657,39 @@ htmlParseScript(htmlParserCtxtPtr ctxt) {
}
nbchar = 0;
htmlParseComment(ctxt);
- cur = CUR;
+ cur = CUR_CHAR(l);
continue;
} else if ((cur == '<') && (NXT(1) == '/')) {
- /*
- * One should break here, the specification is clear:
- * Authors should therefore escape "</" within the content.
- * Escape mechanisms are specific to each scripting or
- * style sheet language.
- */
- if (((NXT(2) >= 'A') && (NXT(2) <= 'Z')) ||
- ((NXT(2) >= 'a') && (NXT(2) <= 'z')))
- break; /* while */
+ /*
+ * One should break here, the specification is clear:
+ * Authors should therefore escape "</" within the content.
+ * Escape mechanisms are specific to each scripting or
+ * style sheet language.
+ *
+ * In recovery mode, only break if end tag match the
+ * current tag, effectively ignoring all tags inside the
+ * script/style block and treating the entire block as
+ * CDATA.
+ */
+ if (ctxt->recovery) {
+ if (xmlStrncasecmp(ctxt->name, ctxt->input->cur+2,
+ xmlStrlen(ctxt->name)) == 0)
+ {
+ break; /* while */
+ } else {
+ htmlParseErr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
+ "Element %s embbeds close tag\n",
+ ctxt->name, NULL);
+ }
+ } else {
+ if (((NXT(2) >= 'A') && (NXT(2) <= 'Z')) ||
+ ((NXT(2) >= 'a') && (NXT(2) <= 'z')))
+ {
+ break; /* while */
+ }
+ }
}
- buf[nbchar++] = cur;
+ COPY_BUF(l,buf,nbchar,cur);
if (nbchar >= HTML_PARSER_BIG_BUFFER_SIZE) {
if (ctxt->sax->cdataBlock!= NULL) {
/*
@@ -2673,9 +2701,10 @@ htmlParseScript(htmlParserCtxtPtr ctxt) {
}
nbchar = 0;
}
- NEXT;
- cur = CUR;
+ NEXTL(l);
+ cur = CUR_CHAR(l);
}
+
if (!(IS_CHAR_CH(cur))) {
htmlParseErrInt(ctxt, XML_ERR_INVALID_CHAR,
"Invalid char in CDATA 0x%X\n", cur);
@@ -2743,6 +2772,8 @@ htmlParseCharData(htmlParserCtxtPtr ctxt) {
}
}
if (nbchar != 0) {
+ buf[nbchar] = 0;
+
/*
* Ok the segment is to be consumed as chars.
*/
@@ -3578,6 +3609,15 @@ htmlParseEndTag(htmlParserCtxtPtr ctxt)
if ((!IS_CHAR_CH(CUR)) || (CUR != '>')) {
htmlParseErr(ctxt, XML_ERR_GT_REQUIRED,
"End tag : expected '>'\n", NULL, NULL);
+ if (ctxt->recovery) {
+ /*
+ * We're not at the ending > !!
+ * Error, unless in recover mode where we search forwards
+ * until we find a >
+ */
+ while (CUR != '\0' && CUR != '>') NEXT;
+ NEXT;
+ }
} else
NEXT;
@@ -5176,10 +5216,18 @@ htmlParseChunk(htmlParserCtxtPtr ctxt, const char *chunk, int size,
(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;
+ int 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];
#ifdef DEBUG_PUSH
xmlGenericError(xmlGenericErrorContext, "HPP: pushed %d\n", size);
#endif
@@ -5777,6 +5825,14 @@ htmlCtxtUseOptions(htmlParserCtxtPtr ctxt, int options)
ctxt->options |= XML_PARSE_NOBLANKS;
} else
ctxt->keepBlanks = 1;
+ if (options & HTML_PARSE_RECOVER) {
+ ctxt->recovery = 1;
+ } else
+ ctxt->recovery = 0;
+ if (options & HTML_PARSE_COMPACT) {
+ ctxt->options |= HTML_PARSE_COMPACT;
+ options -= HTML_PARSE_COMPACT;
+ }
ctxt->dictNames = 0;
return (options);
}
diff --git a/HTMLtree.c b/HTMLtree.c
index de086db..e77ee65 100644
--- a/HTMLtree.c
+++ b/HTMLtree.c
@@ -552,6 +552,8 @@ htmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int *size) {
*size = 0;
return;
}
+ } else {
+ handler = xmlFindCharEncodingHandler(encoding);
}
}
@@ -1026,6 +1028,8 @@ htmlDocDump(FILE *f, xmlDocPtr cur) {
handler = xmlFindCharEncodingHandler(encoding);
if (handler == NULL)
return(-1);
+ } else {
+ handler = xmlFindCharEncodingHandler(encoding);
}
}
diff --git a/Makefile.am b/Makefile.am
index 69dba11..ee09a7b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -27,7 +27,8 @@ libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.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
+ xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c \
+ xmlmodule.c schematron.c
else
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 \
@@ -37,7 +38,7 @@ libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.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
+ xmlmodule.c schematron.c
endif
DEPS = $(top_builddir)/libxml2.la
@@ -158,7 +159,7 @@ check-local: all tests
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_THREADS@ Timingtests @TEST_VTIME@ @PYTHON_TESTS@ @TEST_MODULES@
+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)
@@ -821,6 +822,21 @@ Regexptests: testRegexp$(EXEEXT)
if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
rm result.$$name ; \
fi ; fi ; done)
+ @echo "## Formal expresssions regression tests"
+ -@(for i in $(srcdir)/test/expr/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/expr/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testRegexp --expr -i $$i > $(srcdir)/result/expr/$$name; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testRegexp --expr -i $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/expr/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
Automatatests: testAutomata$(EXEEXT)
@(echo > .memdump)
@@ -997,7 +1013,7 @@ Relaxtests: xmllint$(EXEEXT)
> res.$$name 2> err.$$name;\
grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
diff $(srcdir)/result/relaxng/"$$name"_"$$xno" res.$$name;\
- if [ "$$name" != "tutor10_1" -a "$$name" != "tutor10_2" -a "$$name" != "tutor3_2" ] ; then \
+ if [ "$$name" != "tutor10_1" -a "$$name" != "tutor10_2" -a "$$name" != "tutor3_2" -a "$$name" != "307377" ] ; then \
diff $(srcdir)/result/relaxng/"$$name"_"$$xno".err \
err.$$name | grep -v "error detected at";\
fi ; grep Unimplemented err.$$name`; \
@@ -1006,6 +1022,35 @@ Relaxtests: xmllint$(EXEEXT)
fi ; fi ; \
done; done)
+Schematrontests: xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Schematron regression tests"
+ -@(for i in $(srcdir)/test/schematron/*.sct ; do \
+ name=`basename $$i | sed 's+\.sct++'`; \
+ for j in $(srcdir)/test/schematron/"$$name"_*.xml ; do \
+ if [ -f $$j ] ; then \
+ xno=`basename $$j | sed 's+.*_\(.*\).xml+\1+'`; \
+ if [ ! -f $(srcdir)/result/schematron/"$$name"_"$$xno" ]; \
+ then \
+ echo New test file "$$name"_"$$xno" ; \
+ $(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --schematron $$i $$j \
+ > $(srcdir)/result/schematron/"$$name"_"$$xno" \
+ 2> $(srcdir)/result/schematron/"$$name"_"$$xno".err; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --schematron $$i $$j \
+ > res.$$name 2> err.$$name;\
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/schematron/"$$name"_"$$xno" \
+ res.$$name;\
+ diff $(srcdir)/result/schematron/"$$name"_"$$xno".err \
+ err.$$name | grep -v "error detected at";\
+ grep Unimplemented err.$$name`; \
+ if [ -n "$$log" ] ; then echo "$$name"_"$$xno" result ; echo $$log ; fi ; \
+ rm res.$$name err.$$name ; \
+ fi ; fi ; \
+ done; done)
+
RelaxNGPythonTests:
@(if [ -x $(PYTHON) ] ; then \
PYTHONPATH=$(top_builddir)/python:$(top_builddir)/python/.libs:$$PYTHONPATH ; \
@@ -1134,3 +1179,6 @@ install-data-local:
tst: tst.c
$(CC) $(CFLAGS) -Iinclude -o tst tst.c .libs/libxml2.a -lpthread -lm -lz
+
+sparse: clean
+ $(MAKE) CC=cgcc
diff --git a/Makefile.in b/Makefile.in
index 5c831ad..3e66d17 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -88,7 +88,8 @@ am__libxml2_la_SOURCES_DIST = SAX.c entities.c encoding.c error.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 triostr.c trio.c
+ chvalid.c pattern.c xmlsave.c xmlmodule.c schematron.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 \
@@ -103,7 +104,7 @@ am__libxml2_la_SOURCES_DIST = SAX.c entities.c encoding.c error.c \
@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
+@WITH_TRIO_SOURCES_FALSE@ xmlsave.lo xmlmodule.lo schematron.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 \
@@ -119,7 +120,7 @@ am__libxml2_la_SOURCES_DIST = SAX.c entities.c encoding.c error.c \
@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
+@WITH_TRIO_SOURCES_TRUE@ xmlmodule.lo schematron.lo
libxml2_la_OBJECTS = $(am_libxml2_la_OBJECTS)
testdso_la_LIBADD =
am_testdso_la_OBJECTS = testdso.lo
@@ -319,6 +320,7 @@ TEST_PUSH = @TEST_PUSH@
TEST_REGEXPS = @TEST_REGEXPS@
TEST_SAX = @TEST_SAX@
TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_SCHEMATRON = @TEST_SCHEMATRON@
TEST_THREADS = @TEST_THREADS@
TEST_VALID = @TEST_VALID@
TEST_VTIME = @TEST_VTIME@
@@ -354,6 +356,7 @@ WITH_REGEXPS = @WITH_REGEXPS@
WITH_RUN_DEBUG = @WITH_RUN_DEBUG@
WITH_SAX1 = @WITH_SAX1@
WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_SCHEMATRON = @WITH_SCHEMATRON@
WITH_THREADS = @WITH_THREADS@
WITH_TREE = @WITH_TREE@
WITH_TRIO = @WITH_TRIO@
@@ -438,7 +441,7 @@ libxml2_la_LDFLAGS = @CYGWIN_EXTRA_LDFLAGS@ @WIN32_EXTRA_LDFLAGS@ -version-info
@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
+@WITH_TRIO_SOURCES_FALSE@ xmlmodule.c schematron.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 \
@@ -447,7 +450,8 @@ libxml2_la_LDFLAGS = @CYGWIN_EXTRA_LDFLAGS@ @WIN32_EXTRA_LDFLAGS@ -version-info
@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 xmlmodule.c
+@WITH_TRIO_SOURCES_TRUE@ xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c \
+@WITH_TRIO_SOURCES_TRUE@ xmlmodule.c schematron.c
DEPS = $(top_builddir)/libxml2.la
LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@
@@ -791,6 +795,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/relaxng.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runsuite.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runtest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/schematron.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testAutomata.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testC14N.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testHTML.Po@am__quote@
@@ -1412,7 +1417,7 @@ check-local: all tests
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_THREADS@ Timingtests @TEST_VTIME@ @PYTHON_TESTS@ @TEST_MODULES@
+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)
@@ -2075,6 +2080,21 @@ Regexptests: testRegexp$(EXEEXT)
if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
rm result.$$name ; \
fi ; fi ; done)
+ @echo "## Formal expresssions regression tests"
+ -@(for i in $(srcdir)/test/expr/* ; do \
+ name=`basename $$i`; \
+ if [ ! -d $$i ] ; then \
+ if [ ! -f $(srcdir)/result/expr/$$name ] ; then \
+ echo New test file $$name ; \
+ $(CHECKER) $(top_builddir)/testRegexp --expr -i $$i > $(srcdir)/result/expr/$$name; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/testRegexp --expr -i $$i 2>&1 > result.$$name ; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/expr/$$name result.$$name` ; \
+ if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
+ rm result.$$name ; \
+ fi ; fi ; done)
Automatatests: testAutomata$(EXEEXT)
@(echo > .memdump)
@@ -2251,7 +2271,7 @@ Relaxtests: xmllint$(EXEEXT)
> res.$$name 2> err.$$name;\
grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
diff $(srcdir)/result/relaxng/"$$name"_"$$xno" res.$$name;\
- if [ "$$name" != "tutor10_1" -a "$$name" != "tutor10_2" -a "$$name" != "tutor3_2" ] ; then \
+ if [ "$$name" != "tutor10_1" -a "$$name" != "tutor10_2" -a "$$name" != "tutor3_2" -a "$$name" != "307377" ] ; then \
diff $(srcdir)/result/relaxng/"$$name"_"$$xno".err \
err.$$name | grep -v "error detected at";\
fi ; grep Unimplemented err.$$name`; \
@@ -2260,6 +2280,35 @@ Relaxtests: xmllint$(EXEEXT)
fi ; fi ; \
done; done)
+Schematrontests: xmllint$(EXEEXT)
+ @(echo > .memdump)
+ @echo "## Schematron regression tests"
+ -@(for i in $(srcdir)/test/schematron/*.sct ; do \
+ name=`basename $$i | sed 's+\.sct++'`; \
+ for j in $(srcdir)/test/schematron/"$$name"_*.xml ; do \
+ if [ -f $$j ] ; then \
+ xno=`basename $$j | sed 's+.*_\(.*\).xml+\1+'`; \
+ if [ ! -f $(srcdir)/result/schematron/"$$name"_"$$xno" ]; \
+ then \
+ echo New test file "$$name"_"$$xno" ; \
+ $(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --schematron $$i $$j \
+ > $(srcdir)/result/schematron/"$$name"_"$$xno" \
+ 2> $(srcdir)/result/schematron/"$$name"_"$$xno".err; \
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ else \
+ log=`$(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --schematron $$i $$j \
+ > res.$$name 2> err.$$name;\
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/schematron/"$$name"_"$$xno" \
+ res.$$name;\
+ diff $(srcdir)/result/schematron/"$$name"_"$$xno".err \
+ err.$$name | grep -v "error detected at";\
+ grep Unimplemented err.$$name`; \
+ if [ -n "$$log" ] ; then echo "$$name"_"$$xno" result ; echo $$log ; fi ; \
+ rm res.$$name err.$$name ; \
+ fi ; fi ; \
+ done; done)
+
RelaxNGPythonTests:
@(if [ -x $(PYTHON) ] ; then \
PYTHONPATH=$(top_builddir)/python:$(top_builddir)/python/.libs:$$PYTHONPATH ; \
@@ -2353,6 +2402,9 @@ install-data-local:
tst: tst.c
$(CC) $(CFLAGS) -Iinclude -o tst tst.c .libs/libxml2.a -lpthread -lm -lz
+
+sparse: clean
+ $(MAKE) CC=cgcc
# 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:
diff --git a/NEWS b/NEWS
index a8f28ea..5187931 100644
--- a/NEWS
+++ b/NEWS
@@ -15,6 +15,45 @@ ChangeLog.html
to the CVS at
http://cvs.gnome.org/viewcvs/libxml2/
code base.There is the list of public releases:
+2.6.21: Sep 4 2005:
+ - 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 Python binary, use $GCC inestad of $CC = 'gcc' (Andrew
+ W. Nosenko), compilation/link with threads and old gcc, compile
+ problem by C370 on Z/OS,
+ - bug fixes: http_proxy environments (Peter Breitenlohner), HTML UTF-8
+ bug (Jiri Netolicky), XPath NaN compare bug (William Brack),
+ htmlParseScript potential bug, Schemas regexp handling of spaces,
+ Base64 Schemas comparisons NIST passes, automata build error xsd:all,
+ xmlGetNodePath for namespaced attributes (Alexander Pohoyda),
+ xmlSchemas foreign namespaces handling, XML Schemas facet comparison
+ (Kupriyanov Anatolij), xmlSchemaPSimpleTypeErr error report (Kasimier
+ Buchcik), xml: namespace ahndling in Schemas (Kasimier), empty model
+ group in Schemas (Kasimier), wilcard in Schemas (Kasimier), URI
+ composition (William), xs:anyType in Schemas (Kasimier), Python resolver
+ emmitting error messages directly, Python xmlAttr.parent (Jakub Piotr
+ Clapa), trying to fix the file path/URI conversion,
+ xmlTextReaderGetAttribute fix (Rob Richards), xmlSchemaFreeAnnot memleak
+ (Kasimier), HTML UTF-8 serialization, streaming XPath, Schemas determinism
+ detection problem, XInclude bug, Schemas context type (Dean Hill),
+ validation fix (Derek Poon), xmlTextReaderGetAttribute[Ns] namespaces
+ (Rob Richards), Schemas type fix (Kuba Nowakowski), UTF-8 parser bug,
+ error in encoding handling, xmlGetLineNo fixes, bug on entities handling,
+ entity name extraction in error handling with XInclude, text nodes
+ in HTML body tags (Gary Coady), xml:id and IDness at the treee level
+ fixes, XPath streaming patterns bugs.
+ - improvements: structured interfaces for schemas and RNG error reports
+ (Marcus Boerger), optimization of the char data inner loop parsing
+ (thanks to Behdad Esfahbod for the idea), schematron validation
+ though not finished yet, xmlSaveOption to omit XML declaration,
+ keyref match error reports (Kasimier), formal expression handling
+ code not plugged yet, more lax mode for the HTML parser,
+ parser XML_PARSE_COMPACT option for text nodes allocation.
+ - documentation: xmllint man page had --nonet duplicated
+
+
2.6.20: Jul 10 2005:
- build fixes: Windows build (Rob Richards), Mingw compilation (Igor
Zlatkovic), Windows Makefile (Igor), gcc warnings (Kasimier and
diff --git a/SAX2.c b/SAX2.c
index 16e361f..9f7edf6 100644
--- a/SAX2.c
+++ b/SAX2.c
@@ -227,7 +227,7 @@ const xmlChar *
xmlSAX2GetSystemId(void *ctx)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- if ((ctx == NULL) || (ctxt->input == NULL)) return(0);
+ if ((ctx == NULL) || (ctxt->input == NULL)) return(NULL);
return((const xmlChar *) ctxt->input->filename);
}
@@ -1022,7 +1022,7 @@ xmlSAX2EndDocument(void *ctx)
}
}
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED)
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
/**
* xmlSAX2AttributeInternal:
* @ctx: the user data (XML parser context)
@@ -1316,11 +1316,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname,
* when validating, the ID registration is done at the attribute
* validation level. Otherwise we have to do specific handling here.
*/
- if (xmlIsID(ctxt->myDoc, ctxt->node, ret))
- xmlAddID(&ctxt->vctxt, ctxt->myDoc, value, ret);
- else if (xmlIsRef(ctxt->myDoc, ctxt->node, ret))
- xmlAddRef(&ctxt->vctxt, ctxt->myDoc, value, ret);
- else if (xmlStrEqual(fullname, BAD_CAST "xml:id")) {
+ if (xmlStrEqual(fullname, BAD_CAST "xml:id")) {
/*
* Add the xml:id value
*
@@ -1332,7 +1328,10 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname,
(const char *) value, NULL);
}
xmlAddID(&ctxt->vctxt, ctxt->myDoc, value, ret);
- }
+ } else if (xmlIsID(ctxt->myDoc, ctxt->node, ret))
+ xmlAddID(&ctxt->vctxt, ctxt->myDoc, value, ret);
+ else if (xmlIsRef(ctxt->myDoc, ctxt->node, ret))
+ xmlAddRef(&ctxt->vctxt, ctxt->myDoc, value, ret);
}
error:
@@ -1777,6 +1776,7 @@ xmlSAX2TextNode(xmlParserCtxtPtr ctxt, const xmlChar *str, int len) {
xmlErrMemory(ctxt, "xmlSAX2Characters");
return(NULL);
}
+ memset(ret, 0, sizeof(xmlNode));
/*
* intern the formatting blanks found between tags, or the
* very short strings
@@ -1784,7 +1784,14 @@ xmlSAX2TextNode(xmlParserCtxtPtr ctxt, const xmlChar *str, int len) {
if (ctxt->dictNames) {
xmlChar cur = str[len];
- if ((len <= 3) && ((cur == '"') || (cur == '\'') ||
+ if ((len < (int) (2 * sizeof(void *))) &&
+ (ctxt->options & XML_PARSE_COMPACT)) {
+ /* store the string in the node overrithing properties and nsDef */
+ xmlChar *tmp = (xmlChar *) &(ret->properties);
+ memcpy(tmp, str, len);
+ tmp[len] = 0;
+ intern = tmp;
+ } else if ((len <= 3) && ((cur == '"') || (cur == '\'') ||
((cur == '<') && (str[len + 1] != '!')))) {
intern = xmlDictLookup(ctxt->dict, str, len);
} else if (IS_BLANK_CH(*str) && (len < 60) && (cur == '<') &&
@@ -1798,7 +1805,6 @@ xmlSAX2TextNode(xmlParserCtxtPtr ctxt, const xmlChar *str, int len) {
}
}
skip:
- memset(ret, 0, sizeof(xmlNode));
ret->type = XML_TEXT_NODE;
ret->name = xmlStringText;
@@ -2040,16 +2046,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt,
* when validating, the ID registration is done at the attribute
* validation level. Otherwise we have to do specific handling here.
*/
- if (xmlIsID(ctxt->myDoc, ctxt->node, ret)) {
- /* might be worth duplicate entry points and not copy */
- if (dup == NULL)
- dup = xmlStrndup(value, valueend - value);
- xmlAddID(&ctxt->vctxt, ctxt->myDoc, dup, ret);
- } else if (xmlIsRef(ctxt->myDoc, ctxt->node, ret)) {
- if (dup == NULL)
- dup = xmlStrndup(value, valueend - value);
- xmlAddRef(&ctxt->vctxt, ctxt->myDoc, dup, ret);
- } else if ((prefix == ctxt->str_xml) &&
+ if ((prefix == ctxt->str_xml) &&
(localname[0] == 'i') && (localname[1] == 'd') &&
(localname[2] == 0)) {
/*
@@ -2067,6 +2064,15 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt,
}
#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 */
+ if (dup == NULL)
+ dup = xmlStrndup(value, valueend - value);
+ xmlAddID(&ctxt->vctxt, ctxt->myDoc, dup, ret);
+ } else if (xmlIsRef(ctxt->myDoc, ctxt->node, ret)) {
+ if (dup == NULL)
+ dup = xmlStrndup(value, valueend - value);
+ xmlAddRef(&ctxt->vctxt, ctxt->myDoc, dup, ret);
}
}
if (dup != NULL)
@@ -2407,8 +2413,11 @@ xmlSAX2Characters(void *ctx, const xmlChar *ch, int len)
* We try to minimaze realloc() uses and avoid copying
* and recomputing length over and over.
*/
- if ((ctxt->nodemem == ctxt->nodelen + 1) &&
- (xmlDictOwns(ctxt->dict, lastChild->content))) {
+ if (lastChild->content == (xmlChar *)&(lastChild->properties)) {
+ lastChild->content = xmlStrdup(lastChild->content);
+ lastChild->properties = NULL;
+ } else if ((ctxt->nodemem == ctxt->nodelen + 1) &&
+ (xmlDictOwns(ctxt->dict, lastChild->content))) {
lastChild->content = xmlStrdup(lastChild->content);
}
if (ctxt->nodelen + len >= ctxt->nodemem) {
@@ -2496,6 +2505,14 @@ xmlSAX2ProcessingInstruction(void *ctx, const xmlChar *target,
if (ret == NULL) return;
parent = ctxt->node;
+ if (ctxt->linenumbers) {
+ if (ctxt->input != NULL) {
+ if (ctxt->input->line < 65535)
+ ret->line = (short) ctxt->input->line;
+ else
+ ret->line = 65535;
+ }
+ }
if (ctxt->inSubset == 1) {
xmlAddChild((xmlNodePtr) ctxt->myDoc->intSubset, ret);
return;
@@ -2548,6 +2565,14 @@ xmlSAX2Comment(void *ctx, const xmlChar *value)
#endif
ret = xmlNewDocComment(ctxt->myDoc, value);
if (ret == NULL) return;
+ if (ctxt->linenumbers) {
+ if (ctxt->input != NULL) {
+ if (ctxt->input->line < 65535)
+ ret->line = (short) ctxt->input->line;
+ else
+ ret->line = 65535;
+ }
+ }
if (ctxt->inSubset == 1) {
xmlAddChild((xmlNodePtr) ctxt->myDoc->intSubset, ret);
diff --git a/configure b/configure
index b5ac4f1..fc6f2f8 100755
--- a/configure
+++ b/configure
@@ -463,7 +463,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os LIBXML_MAJOR_VERSION LIBXML_MINOR_VERSION LIBXML_MICRO_VERSION LIBXML_VERSION LIBXML_VERSION_INFO LIBXML_VERSION_NUMBER LIBXML_VERSION_EXTRA INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP RM MV TAR PERL XMLLINT XSLTPROC EGREP U ANSI2KNR LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB DLLTOOL ac_ct_DLLTOOL AS ac_ct_AS OBJDUMP ac_ct_OBJDUMP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL HTML_DIR Z_CFLAGS Z_LIBS PYTHON WITH_PYTHON_TRUE WITH_PYTHON_FALSE pythondir PYTHON_SUBDIR WITH_MODULES MODULE_PLATFORM_LIBS MODULE_EXTENSION TEST_MODULES STATIC_BINARIES WITH_TRIO_SOURCES_TRUE WITH_TRIO_SOURCES_FALSE WITH_TRIO THREAD_LIBS BASE_THREAD_LIBS WITH_THREADS THREAD_CFLAGS TEST_THREADS THREADS_W32 WITH_TREE WITH_FTP FTP_OBJ WITH_HTTP HTTP_OBJ WITH_LEGACY WITH_READER READER_TEST WITH_WRITER WITH_PATTERN TEST_PATTERN WITH_SAX1 TEST_SAX WITH_PUSH TEST_PUSH WITH_HTML HTML_OBJ TEST_HTML TEST_PHTML WITH_VALID TEST_VALID TEST_VTIME WITH_CATALOG CATALOG_OBJ TEST_CATALOG WITH_DOCB DOCB_OBJ WITH_XPTR XPTR_OBJ TEST_XPTR WITH_C14N C14N_OBJ TEST_C14N WITH_XINCLUDE XINCLUDE_OBJ TEST_XINCLUDE WITH_XPATH XPATH_OBJ TEST_XPATH WITH_OUTPUT WITH_ICONV WITH_ISO8859X WITH_SCHEMAS TEST_SCHEMAS WITH_REGEXPS TEST_REGEXPS WITH_DEBUG DEBUG_OBJ TEST_DEBUG WITH_MEM_DEBUG WITH_RUN_DEBUG WIN32_EXTRA_LIBADD WIN32_EXTRA_LDFLAGS CYGWIN_EXTRA_LDFLAGS CYGWIN_EXTRA_PYTHON_LIBADD XML_CFLAGS XML_LIBDIR XML_LIBS XML_LIBTOOLLIBS ICONV_LIBS XML_INCLUDEDIR HAVE_ISNAN HAVE_ISINF PYTHON_VERSION PYTHON_INCLUDES PYTHON_SITE_PACKAGES M_LIBS RDL_LIBS RELDATE PYTHON_TESTS LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os LIBXML_MAJOR_VERSION LIBXML_MINOR_VERSION LIBXML_MICRO_VERSION LIBXML_VERSION LIBXML_VERSION_INFO LIBXML_VERSION_NUMBER LIBXML_VERSION_EXTRA INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP RM MV TAR PERL XMLLINT XSLTPROC EGREP U ANSI2KNR LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB DLLTOOL ac_ct_DLLTOOL AS ac_ct_AS OBJDUMP ac_ct_OBJDUMP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL HTML_DIR Z_CFLAGS Z_LIBS PYTHON WITH_PYTHON_TRUE WITH_PYTHON_FALSE pythondir PYTHON_SUBDIR WITH_MODULES MODULE_PLATFORM_LIBS MODULE_EXTENSION TEST_MODULES STATIC_BINARIES WITH_TRIO_SOURCES_TRUE WITH_TRIO_SOURCES_FALSE WITH_TRIO THREAD_LIBS BASE_THREAD_LIBS WITH_THREADS THREAD_CFLAGS TEST_THREADS THREADS_W32 WITH_TREE WITH_FTP FTP_OBJ WITH_HTTP HTTP_OBJ WITH_LEGACY WITH_READER READER_TEST WITH_WRITER WITH_PATTERN TEST_PATTERN WITH_SAX1 TEST_SAX WITH_PUSH TEST_PUSH WITH_HTML HTML_OBJ TEST_HTML TEST_PHTML WITH_VALID TEST_VALID TEST_VTIME WITH_CATALOG CATALOG_OBJ TEST_CATALOG WITH_DOCB DOCB_OBJ WITH_XPTR XPTR_OBJ TEST_XPTR WITH_C14N C14N_OBJ TEST_C14N WITH_XINCLUDE XINCLUDE_OBJ TEST_XINCLUDE WITH_XPATH XPATH_OBJ TEST_XPATH WITH_OUTPUT WITH_ICONV WITH_ISO8859X WITH_SCHEMATRON TEST_SCHEMATRON WITH_SCHEMAS TEST_SCHEMAS WITH_REGEXPS TEST_REGEXPS WITH_DEBUG DEBUG_OBJ TEST_DEBUG WITH_MEM_DEBUG WITH_RUN_DEBUG WIN32_EXTRA_LIBADD WIN32_EXTRA_LDFLAGS CYGWIN_EXTRA_LDFLAGS CYGWIN_EXTRA_PYTHON_LIBADD XML_CFLAGS XML_LIBDIR XML_LIBS XML_LIBTOOLLIBS ICONV_LIBS XML_INCLUDEDIR HAVE_ISNAN HAVE_ISINF PYTHON_VERSION PYTHON_INCLUDES PYTHON_SITE_PACKAGES M_LIBS RDL_LIBS RELDATE PYTHON_TESTS LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -1070,6 +1070,7 @@ Optional Packages:
--with-run-debug add the runtime debugging module (off)
--with-sax1 add the older SAX1 interface (on)
--with-schemas add Relax-NG and Schemas support (on)
+ --with-schematron add Schematron support (on)
--with-threads add multithread support(on)
--with-thread-alloc add per-thread memory(off)
--with-tree add the DOM like tree manipulation APIs (on)
@@ -1617,7 +1618,7 @@ host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
LIBXML_MAJOR_VERSION=2
LIBXML_MINOR_VERSION=6
-LIBXML_MICRO_VERSION=20
+LIBXML_MICRO_VERSION=21
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
@@ -4691,7 +4692,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 4694 "configure"' > conftest.$ac_ext
+ echo '#line 4695 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -6032,7 +6033,7 @@ fi
# Provide some information about the compiler.
-echo "$as_me:6035:" \
+echo "$as_me:6036:" \
"checking for Fortran 77 compiler version" >&5
ac_compiler=`set X $ac_compile; echo $2`
{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
@@ -7066,11 +7067,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7069: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7070: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7073: \$? = $ac_status" >&5
+ echo "$as_me:7074: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -7299,11 +7300,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7302: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7303: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7306: \$? = $ac_status" >&5
+ echo "$as_me:7307: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -7359,11 +7360,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7362: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7363: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:7366: \$? = $ac_status" >&5
+ echo "$as_me:7367: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -8693,7 +8694,7 @@ linux*)
libsuff=
case "$host_cpu" in
x86_64*|s390x*|powerpc64*)
- echo '#line 8696 "configure"' > conftest.$ac_ext
+ echo '#line 8697 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -9564,7 +9565,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 9567 "configure"
+#line 9568 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -9662,7 +9663,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 9665 "configure"
+#line 9666 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11841,11 +11842,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:11844: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:11845: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:11848: \$? = $ac_status" >&5
+ echo "$as_me:11849: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -11901,11 +11902,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:11904: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:11905: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:11908: \$? = $ac_status" >&5
+ echo "$as_me:11909: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -12412,7 +12413,7 @@ linux*)
libsuff=
case "$host_cpu" in
x86_64*|s390x*|powerpc64*)
- echo '#line 12415 "configure"' > conftest.$ac_ext
+ echo '#line 12416 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -13283,7 +13284,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 13286 "configure"
+#line 13287 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -13381,7 +13382,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 13384 "configure"
+#line 13385 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -14208,11 +14209,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14211: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14212: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:14215: \$? = $ac_status" >&5
+ echo "$as_me:14216: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -14268,11 +14269,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14271: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14272: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:14275: \$? = $ac_status" >&5
+ echo "$as_me:14276: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -15582,7 +15583,7 @@ linux*)
libsuff=
case "$host_cpu" in
x86_64*|s390x*|powerpc64*)
- echo '#line 15585 "configure"' > conftest.$ac_ext
+ echo '#line 15586 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -16323,11 +16324,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:16326: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16327: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:16330: \$? = $ac_status" >&5
+ echo "$as_me:16331: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -16556,11 +16557,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:16559: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16560: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:16563: \$? = $ac_status" >&5
+ echo "$as_me:16564: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -16616,11 +16617,11 @@ else
-e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:16619: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16620: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:16623: \$? = $ac_status" >&5
+ echo "$as_me:16624: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -17950,7 +17951,7 @@ linux*)
libsuff=
case "$host_cpu" in
x86_64*|s390x*|powerpc64*)
- echo '#line 17953 "configure"' > conftest.$ac_ext
+ echo '#line 17954 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -18821,7 +18822,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 18824 "configure"
+#line 18825 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -18919,7 +18920,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 18922 "configure"
+#line 18923 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -20109,6 +20110,12 @@ if test "${with_schemas+set}" = set; then
fi;
+# Check whether --with-schematron or --without-schematron was given.
+if test "${with_schematron+set}" = set; then
+ withval="$with_schematron"
+
+fi;
+
# Check whether --with-threads or --without-threads was given.
if test "${with_threads+set}" = set; then
withval="$with_threads"
@@ -20180,6 +20187,11 @@ then
with_pattern=yes
with_regexp=yes
fi
+if test "$with_schematron" = "yes"
+then
+ with_pattern=yes
+ with_xpath=yes
+fi
if test "$with_reader" = "yes"
then
with_push=yes
@@ -20284,6 +20296,10 @@ then
then
with_schemas=no
fi
+ if test "$with_schematron" = ""
+ then
+ with_schematron=no
+ fi
if test "$with_threads" = ""
then
with_threads=no
@@ -26692,7 +26708,7 @@ fi
echo "$as_me:$LINENO: checking for type of socket length (socklen_t)" >&5
echo $ECHO_N "checking for type of socket length (socklen_t)... $ECHO_C" >&6
cat > conftest.$ac_ext <<EOF
-#line 26695 "configure"
+#line 26711 "configure"
#include "confdefs.h"
#include <stddef.h>
@@ -26703,7 +26719,7 @@ int main(void) {
(void)getsockopt (1, 1, 1, NULL, (socklen_t *)NULL)
; return 0; }
EOF
-if { (eval echo configure:26706: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then
+if { (eval echo configure:26722: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then
rm -rf conftest*
echo "$as_me:$LINENO: result: socklen_t *" >&5
@@ -26715,7 +26731,7 @@ else
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 26718 "configure"
+#line 26734 "configure"
#include "confdefs.h"
#include <stddef.h>
@@ -26726,7 +26742,7 @@ int main(void) {
(void)getsockopt (1, 1, 1, NULL, (size_t *)NULL)
; return 0; }
EOF
-if { (eval echo configure:26729: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then
+if { (eval echo configure:26745: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then
rm -rf conftest*
echo "$as_me:$LINENO: result: size_t *" >&5
@@ -26738,7 +26754,7 @@ else
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 26741 "configure"
+#line 26757 "configure"
#include "confdefs.h"
#include <stddef.h>
@@ -26749,7 +26765,7 @@ int main(void) {
(void)getsockopt (1, 1, 1, NULL, (int *)NULL)
; return 0; }
EOF
-if { (eval echo configure:26752: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then
+if { (eval echo configure:26768: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then
rm -rf conftest*
echo "$as_me:$LINENO: result: int *" >&5
@@ -27554,7 +27570,6 @@ esac
-PYTHON=
PYTHON_VERSION=
PYTHON_INCLUDES=
PYTHON_SITE_PACKAGES=
@@ -27571,8 +27586,12 @@ if test "$with_python" != "no" ; then
echo Found python in $with_python
PYTHON="$with_python"
else
- # Extract the first word of "python 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.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5; ac_word=$2
+ if test -x "$PYTHON"
+ then
+ echo Found python in environment PYTHON=$PYTHON
+ 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
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_path_PYTHON+set}" = set; then
@@ -27610,6 +27629,7 @@ else
echo "${ECHO_T}no" >&6
fi
+ fi
fi
fi
if test "$PYTHON" != ""
@@ -27650,6 +27670,8 @@ fi
else
pythondir='$(libdir)/python${PYTHON_VERSION}/site-packages'
fi
+else
+ PYTHON=
fi
@@ -27671,11 +27693,92 @@ fi
WITH_MODULES=0
-MODULE_EXTENSION=".so"
TEST_MODULES=
if test "$with_modules" != "no" ; then
-echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+ case "$host" in
+ *-*-cygwin*)
+ MODULE_EXTENSION=".dll"
+ echo "$as_me:$LINENO: checking for dlopen in -lcygwin" >&5
+echo $ECHO_N "checking for dlopen in -lcygwin... $ECHO_C" >&6
+if test "${ac_cv_lib_cygwin_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcygwin $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_cygwin_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_cygwin_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_cygwin_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_cygwin_dlopen" >&6
+if test $ac_cv_lib_cygwin_dlopen = yes; then
+
+ WITH_MODULES=1
+ MODULE_PLATFORM_LIBS=
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DLOPEN
+_ACEOF
+
+
+fi
+
+ ;;
+ *)
+ MODULE_EXTENSION=".so"
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
if test "${ac_cv_lib_dld_shl_load+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -27741,8 +27844,8 @@ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
if test $ac_cv_lib_dld_shl_load = yes; then
- WITH_MODULES=1
- MODULE_PLATFORM_LIBS="-ldld"
+ WITH_MODULES=1
+ MODULE_PLATFORM_LIBS="-ldld"
cat >>confdefs.h <<\_ACEOF
#define HAVE_SHLLOAD
@@ -27752,7 +27855,7 @@ _ACEOF
fi
-echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
if test "${ac_cv_lib_dl_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -27818,8 +27921,8 @@ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
if test $ac_cv_lib_dl_dlopen = yes; then
- WITH_MODULES=1
- MODULE_PLATFORM_LIBS="-ldl"
+ WITH_MODULES=1
+ MODULE_PLATFORM_LIBS="-ldl"
cat >>confdefs.h <<\_ACEOF
#define HAVE_DLOPEN
@@ -27828,6 +27931,8 @@ _ACEOF
fi
+ ;;
+ esac
fi
if test "${WITH_MODULES}" = "1"; then
@@ -27848,6 +27953,7 @@ if [ "${LOGNAME}" = "veillard" -a "`pwd`" = "/u/veillard/XML" ] || \
if test "$with_minimum" != "yes"
then
if test "${with_mem_debug}" = "" ; then
+ echo Activating memory debugging
with_mem_debug="yes"
with_run_debug="yes"
fi
@@ -27855,7 +27961,7 @@ if [ "${LOGNAME}" = "veillard" -a "`pwd`" = "/u/veillard/XML" ] || \
with_docbook="yes"
fi
fi
- if test "${CC}" = "gcc" ; then
+ if test "${GCC}" = "yes" ; then
CFLAGS="-g -O -pedantic -W -Wformat -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat -Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls -Wall"
fi
STATIC_BINARIES="-static"
@@ -28129,9 +28235,25 @@ fi
THREAD_CFLAGS="$THREAD_CFLAGS -DHAVE_BEOS_THREADS"
;;
*linux*)
- if test "${CC}" = "gcc" -a "${THREAD_LIBS}" = "-lpthread" ; then
- THREAD_LIBS=""
- BASE_THREAD_LIBS="-lpthread"
+ if test "${GCC}" = "yes" ; then
+ GCC_VERSION=`${CC} --version | head -1 | awk '{print $3}'`
+ GCC_MAJOR=`echo ${GCC_VERSION} | sed 's+\..*++'`
+ GCC_MEDIUM=`echo ${GCC_VERSION} | sed 's+[0-9]*\.++' | sed 's+\..*++'`
+ if test "${THREAD_LIBS}" = "-lpthread" ; then
+ if expr ${GCC_MEDIUM} \> 2 \& ${GCC_MAJOR} = 3 > /dev/null
+ then
+ THREAD_LIBS=""
+ BASE_THREAD_LIBS="-lpthread"
+ else
+ if expr ${GCC_MAJOR} \> 3 > /dev/null
+ then
+ THREAD_LIBS=""
+ BASE_THREAD_LIBS="-lpthread"
+ else
+ echo old GCC disabling weak symbols for pthread
+ fi
+ fi
+ fi
fi
;;
esac
@@ -29202,6 +29324,20 @@ fi
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
@@ -30153,6 +30289,8 @@ s,@TEST_XPATH@,$TEST_XPATH,;t t
s,@WITH_OUTPUT@,$WITH_OUTPUT,;t t
s,@WITH_ICONV@,$WITH_ICONV,;t t
s,@WITH_ISO8859X@,$WITH_ISO8859X,;t t
+s,@WITH_SCHEMATRON@,$WITH_SCHEMATRON,;t t
+s,@TEST_SCHEMATRON@,$TEST_SCHEMATRON,;t t
s,@WITH_SCHEMAS@,$WITH_SCHEMAS,;t t
s,@TEST_SCHEMAS@,$TEST_SCHEMAS,;t t
s,@WITH_REGEXPS@,$WITH_REGEXPS,;t t
diff --git a/configure.in b/configure.in
index 6777c94..ad902eb 100644
--- a/configure.in
+++ b/configure.in
@@ -5,7 +5,7 @@ AC_CANONICAL_HOST
LIBXML_MAJOR_VERSION=2
LIBXML_MINOR_VERSION=6
-LIBXML_MICRO_VERSION=20
+LIBXML_MICRO_VERSION=21
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
@@ -128,6 +128,8 @@ AC_ARG_WITH(sax1,
[ --with-sax1 add the older SAX1 interface (on)])
AC_ARG_WITH(schemas,
[ --with-schemas add Relax-NG and Schemas support (on)])
+AC_ARG_WITH(schematron,
+[ --with-schematron add Schematron support (on)])
AC_ARG_WITH(threads,
[ --with-threads add multithread support(on)])
AC_ARG_WITH(thread-alloc,
@@ -163,6 +165,11 @@ then
with_pattern=yes
with_regexp=yes
fi
+if test "$with_schematron" = "yes"
+then
+ with_pattern=yes
+ with_xpath=yes
+fi
if test "$with_reader" = "yes"
then
with_push=yes
@@ -270,6 +277,10 @@ then
then
with_schemas=no
fi
+ if test "$with_schematron" = ""
+ then
+ with_schematron=no
+ fi
if test "$with_threads" = ""
then
with_threads=no
@@ -602,7 +613,6 @@ dnl
dnl check for python
dnl
-PYTHON=
PYTHON_VERSION=
PYTHON_INCLUDES=
PYTHON_SITE_PACKAGES=
@@ -619,7 +629,12 @@ if test "$with_python" != "no" ; then
echo Found python in $with_python
PYTHON="$with_python"
else
- AC_PATH_PROG(PYTHON, python python2.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5)
+ if test -x "$PYTHON"
+ then
+ echo Found python in environment PYTHON=$PYTHON
+ 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
fi
fi
if test "$PYTHON" != ""
@@ -660,6 +675,8 @@ if test "$with_python" != "no" ; then
else
pythondir='$(libdir)/python${PYTHON_VERSION}/site-packages'
fi
+else
+ PYTHON=
fi
AM_CONDITIONAL(WITH_PYTHON, test "$PYTHON_INCLUDES" != "")
if test "$PYTHON_INCLUDES" != ""
@@ -673,21 +690,33 @@ AC_SUBST(PYTHON_SUBDIR)
dnl check for dso support
WITH_MODULES=0
-MODULE_EXTENSION=".so"
TEST_MODULES=
if test "$with_modules" != "no" ; then
-AC_CHECK_LIB(dld, shl_load, [
- WITH_MODULES=1
- MODULE_PLATFORM_LIBS="-ldld"
- AC_DEFINE([HAVE_SHLLOAD], [], [Have shl_load based dso])
-])
-
-AC_CHECK_LIB(dl, dlopen, [
- WITH_MODULES=1
- MODULE_PLATFORM_LIBS="-ldl"
- AC_DEFINE([HAVE_DLOPEN], [], [Have dlopen based dso])
-])
+ case "$host" in
+ *-*-cygwin*)
+ MODULE_EXTENSION=".dll"
+ AC_CHECK_LIB(cygwin, dlopen, [
+ WITH_MODULES=1
+ MODULE_PLATFORM_LIBS=
+ AC_DEFINE([HAVE_DLOPEN], [], [Have dlopen based dso])
+ ])
+ ;;
+ *)
+ MODULE_EXTENSION=".so"
+ AC_CHECK_LIB(dld, shl_load, [
+ WITH_MODULES=1
+ MODULE_PLATFORM_LIBS="-ldld"
+ AC_DEFINE([HAVE_SHLLOAD], [], [Have shl_load based dso])
+ ])
+
+ AC_CHECK_LIB(dl, dlopen, [
+ WITH_MODULES=1
+ MODULE_PLATFORM_LIBS="-ldl"
+ AC_DEFINE([HAVE_DLOPEN], [], [Have dlopen based dso])
+ ])
+ ;;
+ esac
fi
if test "${WITH_MODULES}" = "1"; then
@@ -715,6 +744,7 @@ if [[ "${LOGNAME}" = "veillard" -a "`pwd`" = "/u/veillard/XML" ]] || \
if test "$with_minimum" != "yes"
then
if test "${with_mem_debug}" = "" ; then
+ echo Activating memory debugging
with_mem_debug="yes"
with_run_debug="yes"
fi
@@ -722,7 +752,7 @@ if [[ "${LOGNAME}" = "veillard" -a "`pwd`" = "/u/veillard/XML" ]] || \
with_docbook="yes"
fi
fi
- if test "${CC}" = "gcc" ; then
+ if test "${GCC}" = "yes" ; then
CFLAGS="-g -O -pedantic -W -Wformat -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat -Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls -Wall"
fi
STATIC_BINARIES="-static"
@@ -782,9 +812,25 @@ else
THREAD_CFLAGS="$THREAD_CFLAGS -DHAVE_BEOS_THREADS"
;;
*linux*)
- if test "${CC}" = "gcc" -a "${THREAD_LIBS}" = "-lpthread" ; then
- THREAD_LIBS=""
- BASE_THREAD_LIBS="-lpthread"
+ if test "${GCC}" = "yes" ; then
+ GCC_VERSION=`${CC} --version | head -1 | awk '{print $3}'`
+ GCC_MAJOR=`echo ${GCC_VERSION} | sed 's+\..*++'`
+ GCC_MEDIUM=`echo ${GCC_VERSION} | sed 's+[[0-9]]*\.++' | sed 's+\..*++'`
+ if test "${THREAD_LIBS}" = "-lpthread" ; then
+ if expr ${GCC_MEDIUM} \> 2 \& ${GCC_MAJOR} = 3 > /dev/null
+ then
+ THREAD_LIBS=""
+ BASE_THREAD_LIBS="-lpthread"
+ else
+ if expr ${GCC_MAJOR} \> 3 > /dev/null
+ then
+ THREAD_LIBS=""
+ BASE_THREAD_LIBS="-lpthread"
+ else
+ echo old GCC disabling weak symbols for pthread
+ fi
+ fi
+ fi
fi
;;
esac
@@ -1140,6 +1186,20 @@ 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
diff --git a/debugXML.c b/debugXML.c
index 3cb2848..59529d6 100644
--- a/debugXML.c
+++ b/debugXML.c
@@ -34,6 +34,8 @@
#include <libxml/relaxng.h>
#endif
+#define DUMP_TEXT_TYPE 1
+
typedef struct _xmlDebugCtxt xmlDebugCtxt;
typedef xmlDebugCtxt *xmlDebugCtxtPtr;
struct _xmlDebugCtxt {
@@ -46,6 +48,7 @@ struct _xmlDebugCtxt {
int check; /* do just checkings */
int errors; /* number of errors found */
int nodict; /* if the document has no dictionnary */
+ int options; /* options */
};
static void xmlCtxtDumpNodeList(xmlDebugCtxtPtr ctxt, xmlNodePtr node);
@@ -63,6 +66,7 @@ xmlCtxtDumpInitCtxt(xmlDebugCtxtPtr ctxt)
ctxt->node = NULL;
ctxt->dict = NULL;
ctxt->nodict = 0;
+ ctxt->options = 0;
for (i = 0; i < 100; i++)
ctxt->shift[i] = ' ';
ctxt->shift[100] = 0;
@@ -902,9 +906,18 @@ xmlCtxtDumpOneNode(xmlDebugCtxtPtr ctxt, xmlNodePtr node)
if (!ctxt->check) {
xmlCtxtDumpSpaces(ctxt);
if (node->name == (const xmlChar *) xmlStringTextNoenc)
- fprintf(ctxt->output, "TEXT no enc\n");
+ fprintf(ctxt->output, "TEXT no enc");
else
- fprintf(ctxt->output, "TEXT\n");
+ fprintf(ctxt->output, "TEXT");
+ if (ctxt->options & DUMP_TEXT_TYPE) {
+ if (node->content == (xmlChar *) &(node->properties))
+ fprintf(ctxt->output, " compact\n");
+ else if (xmlDictOwns(ctxt->dict, node->content) == 1)
+ fprintf(ctxt->output, " interned\n");
+ else
+ fprintf(ctxt->output, "\n");
+ } else
+ fprintf(ctxt->output, "\n");
}
break;
case XML_CDATA_SECTION_NODE:
@@ -1005,9 +1018,9 @@ xmlCtxtDumpOneNode(xmlDebugCtxtPtr ctxt, xmlNodePtr node)
fprintf(ctxt->output, "PBM: doc == NULL !!!\n");
}
ctxt->depth++;
- if (node->nsDef != NULL)
+ if ((node->type == XML_ELEMENT_NODE) && (node->nsDef != NULL))
xmlCtxtDumpNamespaceList(ctxt, node->nsDef);
- if (node->properties != NULL)
+ if ((node->type == XML_ELEMENT_NODE) && (node->properties != NULL))
xmlCtxtDumpAttrList(ctxt, node->properties);
if (node->type != XML_ENTITY_REF_NODE) {
if ((node->type != XML_ELEMENT_NODE) && (node->content != NULL)) {
@@ -1489,6 +1502,7 @@ xmlDebugDumpDocumentHead(FILE * output, xmlDocPtr doc)
if (output == NULL)
output = stdout;
xmlCtxtDumpInitCtxt(&ctxt);
+ ctxt.options |= DUMP_TEXT_TYPE;
ctxt.output = output;
xmlCtxtDumpDocumentHead(&ctxt, doc);
xmlCtxtDumpCleanCtxt(&ctxt);
@@ -1509,6 +1523,7 @@ xmlDebugDumpDocument(FILE * output, xmlDocPtr doc)
if (output == NULL)
output = stdout;
xmlCtxtDumpInitCtxt(&ctxt);
+ ctxt.options |= DUMP_TEXT_TYPE;
ctxt.output = output;
xmlCtxtDumpDocument(&ctxt, doc);
xmlCtxtDumpCleanCtxt(&ctxt);
@@ -1529,6 +1544,7 @@ xmlDebugDumpDTD(FILE * output, xmlDtdPtr dtd)
if (output == NULL)
output = stdout;
xmlCtxtDumpInitCtxt(&ctxt);
+ ctxt.options |= DUMP_TEXT_TYPE;
ctxt.output = output;
xmlCtxtDumpDTD(&ctxt, dtd);
xmlCtxtDumpCleanCtxt(&ctxt);
diff --git a/doc/APIchunk0.html b/doc/APIchunk0.html
index 31a028e..36b401b 100644
--- a/doc/APIchunk0.html
+++ b/doc/APIchunk0.html
@@ -207,7 +207,8 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>BaseChar</dt><dd><a href="html/libxml-parserInternals.html#IS_BASECHAR">IS_BASECHAR</a><br />
<a href="html/libxml-parserInternals.html#IS_LETTER">IS_LETTER</a><br />
<a href="html/libxml-parserInternals.html#xmlIsLetter">xmlIsLetter</a><br />
-</dd><dt>Based</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
+</dd><dt>Based</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
</dd><dt>BasicLatin</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsBasicLatin">xmlUCSIsBasicLatin</a><br />
</dd><dt>Basically</dt><dd><a href="html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd</a><br />
@@ -231,6 +232,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-pattern.html#xmlStreamPushAttr">xmlStreamPushAttr</a><br />
</dd><dt>BoxDrawing</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsBoxDrawing">xmlUCSIsBoxDrawing</a><br />
</dd><dt>BraillePatterns</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsBraillePatterns">xmlUCSIsBraillePatterns</a><br />
+</dd><dt>Brzozowski</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
</dd><dt>Buffer</dt><dd><a href="html/libxml-parser.html#xmlIOParseDTD">xmlIOParseDTD</a><br />
</dd><dt>Bugs:</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
</dd><dt>Buhid</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsBuhid">xmlUCSIsBuhid</a><br />
diff --git a/doc/APIchunk1.html b/doc/APIchunk1.html
index 51c034a..668482d 100644
--- a/doc/APIchunk1.html
+++ b/doc/APIchunk1.html
@@ -305,6 +305,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>Creates</dt><dd><a href="html/libxml-HTMLtree.html#htmlNewDoc">htmlNewDoc</a><br />
<a href="html/libxml-HTMLtree.html#htmlNewDocNoDtD">htmlNewDocNoDtD</a><br />
<a href="html/libxml-parser.html#xmlCreateDocParserCtxt">xmlCreateDocParserCtxt</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
<a href="html/libxml-tree.html#xmlNewDoc">xmlNewDoc</a><br />
<a href="html/libxml-xinclude.html#xmlXIncludeNewContext">xmlXIncludeNewContext</a><br />
</dd><dt>Creation</dt><dd><a href="html/libxml-tree.html#xmlNewCDataBlock">xmlNewCDataBlock</a><br />
diff --git a/doc/APIchunk10.html b/doc/APIchunk10.html
index 249723b..161b4ef 100644
--- a/doc/APIchunk10.html
+++ b/doc/APIchunk10.html
@@ -61,10 +61,12 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_FINAL_ABSENT">XML_SCHEMAS_ELEM_FINAL_ABSENT</a><br />
<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_VARIETY_ABSENT">XML_SCHEMAS_TYPE_VARIETY_ABSENT</a><br />
</dd><dt>absoluteURI</dt><dd><a href="html/libxml-uri.html#xmlParseURI">xmlParseURI</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
<a href="html/libxml-uri.html#xmlParseURIReference">xmlParseURIReference</a><br />
</dd><dt>abstract</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_ABSTRACT">XML_SCHEMAS_ELEM_ABSTRACT</a><br />
<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_ABSTRACT">XML_SCHEMAS_TYPE_ABSTRACT</a><br />
-</dd><dt>accept</dt><dd><a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
+</dd><dt>accept</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpMaxToken">xmlExpMaxToken</a><br />
+<a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
<a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
</dd><dt>acceptable</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegExecErrInfo">xmlRegExecErrInfo</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegExecNextValues">xmlRegExecNextValues</a><br />
@@ -72,10 +74,13 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-catalog.html#xmlCatalogGetDefaults">xmlCatalogGetDefaults</a><br />
<a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
<a href="html/libxml-catalog.html#xmlCatalogSetDefaults">xmlCatalogSetDefaults</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegExecErrInfo">xmlRegExecErrInfo</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegExecNextValues">xmlRegExecNextValues</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
</dd><dt>accepting</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+</dd><dt>accepts</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpIsNillable">xmlExpIsNillable</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpSubsume">xmlExpSubsume</a><br />
</dd><dt>access</dt><dd><a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
<a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
@@ -86,6 +91,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
</dd><dt>accesses</dt><dd><a href="html/libxml-parserInternals.html#xmlCreateURLParserCtxt">xmlCreateURLParserCtxt</a><br />
<a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
+</dd><dt>accexpted</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpSubsume">xmlExpSubsume</a><br />
</dd><dt>accommodate</dt><dd><a href="html/libxml-tree.html#xmlBufferResize">xmlBufferResize</a><br />
</dd><dt>according</dt><dd><a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
<a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
@@ -105,6 +111,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlautomata.html#xmlAutomataNewAllTrans">xmlAutomataNewAllTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans2">xmlAutomataNewCountTrans2</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition">xmlAutomataNewTransition</a><br />
@@ -197,6 +204,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCountedTrans">xmlAutomataNewCountedTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewEpsilon">xmlAutomataNewEpsilon</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition">xmlAutomataNewTransition</a><br />
@@ -240,10 +248,12 @@ A:link, A:visited, A:active { text-decoration: underline }
<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-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 />
<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</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 />
<a href="html/libxml-encoding.html#xmlGetEncodingAlias">xmlGetEncodingAlias</a><br />
@@ -323,6 +333,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-HTMLparser.html#htmlIsAutoClosed">htmlIsAutoClosed</a><br />
<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
</dd><dt>already</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 />
@@ -378,6 +389,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>analysis</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
<a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
</dd><dt>analyze</dt><dd><a href="html/libxml-uri.html#xmlParseURI">xmlParseURI</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
<a href="html/libxml-uri.html#xmlParseURIReference">xmlParseURIReference</a><br />
</dd><dt>analyzed</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
</dd><dt>ancestor</dt><dd><a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
@@ -423,7 +435,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
</dd><dt>appearing</dt><dd><a href="html/libxml-valid.html#xmlValidatePopElement">xmlValidatePopElement</a><br />
<a href="html/libxml-valid.html#xmlValidatePushElement">xmlValidatePushElement</a><br />
-</dd><dt>appears</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
+</dd><dt>appears</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
@@ -504,6 +517,10 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>assuming</dt><dd><a href="html/libxml-tree.html#xmlSaveFileTo">xmlSaveFileTo</a><br />
<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
</dd><dt>assure</dt><dd><a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
+</dd><dt>atom</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewAtom">xmlExpNewAtom</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
</dd><dt>atomic</dt><dd><a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
</dd><dt>attached</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
diff --git a/doc/APIchunk11.html b/doc/APIchunk11.html
index 754df2d..763623f 100644
--- a/doc/APIchunk11.html
+++ b/doc/APIchunk11.html
@@ -62,6 +62,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<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#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewValidCtxt">xmlSchematronNewValidCtxt</a><br />
<a href="html/libxml-tree.html#xmlSetCompressMode">xmlSetCompressMode</a><br />
<a href="html/libxml-tree.html#xmlSetDocCompressMode">xmlSetDocCompressMode</a><br />
<a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
@@ -186,6 +187,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</a><br />
+</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#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
@@ -251,6 +253,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parserInternals.html#xmlParseEnumerationType">xmlParseEnumerationType</a><br />
<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
<a href="html/libxml-uri.html#xmlParseURI">xmlParseURI</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
<a href="html/libxml-parser.html#xmlRecoverDoc">xmlRecoverDoc</a><br />
<a href="html/libxml-parser.html#xmlRecoverFile">xmlRecoverFile</a><br />
<a href="html/libxml-parser.html#xmlRecoverMemory">xmlRecoverMemory</a><br />
@@ -259,6 +262,7 @@ 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#xmlSchemaGetCanonValueWhtsp">xmlSchemaGetCanonValueWhtsp</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronParse">xmlSchematronParse</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
</dd><dt>built-in</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaGetBuiltInListSimpleTypeItemType">xmlSchemaGetBuiltInListSimpleTypeItemType</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetBuiltInType">xmlSchemaGetBuiltInType</a><br />
diff --git a/doc/APIchunk12.html b/doc/APIchunk12.html
index b548fe2..9d1944e 100644
--- a/doc/APIchunk12.html
+++ b/doc/APIchunk12.html
@@ -77,6 +77,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</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 />
<a href="html/libxml-tree.html#xmlNewNsProp">xmlNewNsProp</a><br />
<a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
@@ -198,9 +199,11 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>checking</dt><dd><a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
<a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
<a href="html/libxml-uri.html#xmlBuildURI">xmlBuildURI</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
<a href="html/libxml-xmlmemory.html#xmlMemFree">xmlMemFree</a><br />
<a href="html/libxml-xmlstring.html#xmlUTF8Strlen">xmlUTF8Strlen</a><br />
-</dd><dt>checkings</dt><dd><a href="html/libxml-valid.html#xmlValidateOneElement">xmlValidateOneElement</a><br />
+</dd><dt>checkings</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
+<a href="html/libxml-valid.html#xmlValidateOneElement">xmlValidateOneElement</a><br />
</dd><dt>checks</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ATTRGROUP_MARKED">XML_SCHEMAS_ATTRGROUP_MARKED</a><br />
<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_MARKED">XML_SCHEMAS_TYPE_MARKED</a><br />
<a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
@@ -234,7 +237,9 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>childs</dt><dd><a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
<a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
-</dd><dt>choice</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
+</dd><dt>choice</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
</dd><dt>choices</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
</dd><dt>choices:</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
</dd><dt>chunk</dt><dd><a href="html/libxml-DOCBparser.html#docbParseChunk">docbParseChunk</a><br />
@@ -380,6 +385,8 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>compatible</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a><br />
<a href="html/libxml-debugXML.html#xmlShellPwd">xmlShellPwd</a><br />
</dd><dt>compilation</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_VERSION_EXTRA">LIBXML_VERSION_EXTRA</a><br />
+<a href="html/libxml-xpath.html#XML_XPATH_CHECKNS">XML_XPATH_CHECKNS</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
<a href="html/libxml-xpath.html#xmlXPathCompile">xmlXPathCompile</a><br />
<a href="html/libxml-xpath.html#xmlXPathCtxtCompile">xmlXPathCtxtCompile</a><br />
@@ -400,15 +407,20 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parser.html#xmlSAXParseFile">xmlSAXParseFile</a><br />
<a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
</dd><dt>compiled</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_AUTOMATA_ENABLED">LIBXML_AUTOMATA_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_EXPR_ENABLED">LIBXML_EXPR_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_LEGACY_ENABLED">LIBXML_LEGACY_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_MODULES_ENABLED">LIBXML_MODULES_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_REGEXP_ENABLED">LIBXML_REGEXP_ENABLED</a><br />
<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_UNICODE_ENABLED">LIBXML_UNICODE_ENABLED</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataCompile">xmlAutomataCompile</a><br />
<a href="html/libxml-xmlversion.html#xmlCheckVersion">xmlCheckVersion</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpDump">xmlExpDump</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpMaxToken">xmlExpMaxToken</a><br />
<a href="html/libxml-xmlerror.html#xmlGetLastError">xmlGetLastError</a><br />
+<a href="html/libxml-parser.html#xmlHasFeature">xmlHasFeature</a><br />
<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegexpExec">xmlRegexpExec</a><br />
@@ -578,7 +590,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
</dd><dt>construct</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
</dd><dt>construction</dt><dd><a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
-</dd><dt>constructs</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+</dd><dt>constructs</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
</dd><dt>consumed</dt><dd><a href="html/libxml-HTMLparser.html#UTF8ToHtml">UTF8ToHtml</a><br />
<a href="html/libxml-encoding.html#UTF8Toisolat1">UTF8Toisolat1</a><br />
<a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
@@ -588,12 +601,16 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-encoding.html#isolat1ToUTF8">isolat1ToUTF8</a><br />
<a href="html/libxml-encoding.html#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a><br />
<a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
<a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
<a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaNewNOTATIONValue">xmlSchemaNewNOTATIONValue</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaNewQNameValue">xmlSchemaNewQNameValue</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaNewStringValue">xmlSchemaNewStringValue</a><br />
-</dd><dt>consuming</dt><dd><a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+</dd><dt>consuming</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
</dd><dt>contain</dt><dd><a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
@@ -607,6 +624,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-relaxng.html#xmlRelaxNGNewParserCtxt">xmlRelaxNGNewParserCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaNewMemParserCtxt">xmlSchemaNewMemParserCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaNewParserCtxt">xmlSchemaNewParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewMemParserCtxt">xmlSchematronNewMemParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewParserCtxt">xmlSchematronNewParserCtxt</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathLeading">xmlXPathLeading</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathLeadingSorted">xmlXPathLeadingSorted</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathNodeLeading">xmlXPathNodeLeading</a><br />
@@ -676,7 +695,8 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>continuing</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
</dd><dt>contrary</dt><dd><a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
<a href="html/libxml-xpath.html#xmlXPathFreeNodeSetList">xmlXPathFreeNodeSetList</a><br />
-</dd><dt>control</dt><dd><a href="html/libxml-SAX.html#resolveEntity">resolveEntity</a><br />
+</dd><dt>control</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</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-nanoftp.html#xmlNanoFTPClose">xmlNanoFTPClose</a><br />
<a href="html/libxml-nanoftp.html#xmlNanoFTPConnect">xmlNanoFTPConnect</a><br />
@@ -765,9 +785,11 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlreader.html#xmlTextReaderSetSchema">xmlTextReaderSetSchema</a><br />
<a href="html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd</a><br />
</dd><dt>count</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpRef">xmlExpRef</a><br />
<a href="html/libxml-debugXML.html#xmlLsCountNode">xmlLsCountNode</a><br />
<a href="html/libxml-xmlsave.html#xmlSaveDoc">xmlSaveDoc</a><br />
<a href="html/libxml-xmlsave.html#xmlSaveTree">xmlSaveTree</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidateDoc">xmlSchematronValidateDoc</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderAttributeCount">xmlTextReaderAttributeCount</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathCountFunction">xmlXPathCountFunction</a><br />
</dd><dt>counter</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCountedTrans">xmlAutomataNewCountedTrans</a><br />
@@ -793,6 +815,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCountedTrans">xmlAutomataNewCountedTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewEpsilon">xmlAutomataNewEpsilon</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition">xmlAutomataNewTransition</a><br />
@@ -810,6 +833,9 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>cshema</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FINAL_DEFAULT_LIST">XML_SCHEMAS_FINAL_DEFAULT_LIST</a><br />
</dd><dt>ctrio</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
<a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+</dd><dt>ctxt</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
</dd><dt>ctxt-</dt><dd><a href="html/libxml-DOCBparser.html#docbFreeParserCtxt">docbFreeParserCtxt</a><br />
<a href="html/libxml-HTMLparser.html#htmlFreeParserCtxt">htmlFreeParserCtxt</a><br />
<a href="html/libxml-parser.html#xmlFreeParserCtxt">xmlFreeParserCtxt</a><br />
diff --git a/doc/APIchunk13.html b/doc/APIchunk13.html
index cfab9a4..a44fa80 100644
--- a/doc/APIchunk13.html
+++ b/doc/APIchunk13.html
@@ -239,10 +239,13 @@ A:link, A:visited, A:active { text-decoration: underline }
</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 />
<a href="html/libxml-pattern.html#xmlPatternMaxDepth">xmlPatternMaxDepth</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMinDepth">xmlPatternMinDepth</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderDepth">xmlTextReaderDepth</a><br />
</dd><dt>deregistration</dt><dd><a href="html/libxml-globals.html#xmlDeregisterNodeDefault">xmlDeregisterNodeDefault</a><br />
</dd><dt>derivation</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION">XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION</a><br />
<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION">XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
</dd><dt>des</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderSchemaValidate">xmlTextReaderSchemaValidate</a><br />
@@ -303,7 +306,6 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlsave.html#xmlSaveToFd">xmlSaveToFd</a><br />
<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</a><br />
</dd><dt>designed</dt><dd><a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
-<a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
</dd><dt>desired</dt><dd><a href="html/libxml-tree.html#xmlBufferResize">xmlBufferResize</a><br />
<a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a><br />
<a href="html/libxml-xmlstring.html#xmlUTF8Strloc">xmlUTF8Strloc</a><br />
@@ -387,6 +389,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<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#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 />
<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderStandalone">xmlTextReaderStandalone</a><br />
@@ -405,6 +408,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>direct</dt><dd><a href="html/libxml-HTMLparser.html#htmlElementAllowedHere">htmlElementAllowedHere</a><br />
<a href="html/libxml-HTMLparser.html#htmlElementAllowedHereDesc">htmlElementAllowedHereDesc</a><br />
<a href="html/libxml-HTMLparser.html#htmlElementStatusHere">htmlElementStatusHere</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
<a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
</dd><dt>direction</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNextAncestor">xmlXPathNextAncestor</a><br />
@@ -445,6 +449,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>disable</dt><dd><a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</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 />
</dd><dt>disabling</dt><dd><a href="html/libxml-xmlIO.html#xmlNoNetExternalEntityLoader">xmlNoNetExternalEntityLoader</a><br />
</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 />
@@ -491,36 +496,6 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parser.html#xmlSAXParseMemory">xmlSAXParseMemory</a><br />
<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
<a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
-</dd><dt>does</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
-<a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
-<a href="html/libxml-xmlerror.html#xmlCtxtResetLastError">xmlCtxtResetLastError</a><br />
-<a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</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-xmlmodule.html#xmlModuleFree">xmlModuleFree</a><br />
-<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
-<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
-<a href="html/libxml-xmlerror.html#xmlResetLastError">xmlResetLastError</a><br />
-<a href="html/libxml-xmlsave.html#xmlSaveDoc">xmlSaveDoc</a><br />
-<a href="html/libxml-xmlsave.html#xmlSaveTree">xmlSaveTree</a><br />
-<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetCanonValue">xmlSchemaGetCanonValue</a><br />
-<a href="html/libxml-xmlschemastypes.html#xmlSchemaValPredefTypeNodeNoNorm">xmlSchemaValPredefTypeNodeNoNorm</a><br />
-<a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
-<a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
-<a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
-<a href="html/libxml-valid.html#xmlValidateDocument">xmlValidateDocument</a><br />
-<a href="html/libxml-valid.html#xmlValidateDocumentFinal">xmlValidateDocumentFinal</a><br />
-<a href="html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd</a><br />
-<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
-<a href="html/libxml-valid.html#xmlValidateElementDecl">xmlValidateElementDecl</a><br />
-<a href="html/libxml-valid.html#xmlValidateNotationDecl">xmlValidateNotationDecl</a><br />
-<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
-<a href="html/libxml-valid.html#xmlValidateOneElement">xmlValidateOneElement</a><br />
-<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
-<a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
-<a href="html/libxml-xpathInternals.html#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a><br />
-<a href="html/libxml-xpathInternals.html#xmlXPathSubstringBeforeFunction">xmlXPathSubstringBeforeFunction</a><br />
</dd><dt>doesn</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
<a href="html/libxml-HTMLparser.html#htmlElementAllowedHere">htmlElementAllowedHere</a><br />
<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
@@ -614,6 +589,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlschemas.html#xmlSchemaIsValid">xmlSchemaIsValid</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaNewDocParserCtxt">xmlSchemaNewDocParserCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidOptions">xmlSchemaSetValidOptions</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewDocParserCtxt">xmlSchematronNewDocParserCtxt</a><br />
+</dd><dt>dynamic</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_MODULE_EXTENSION">LIBXML_MODULE_EXTENSION</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>
diff --git a/doc/APIchunk14.html b/doc/APIchunk14.html
index 9855554..d568108 100644
--- a/doc/APIchunk14.html
+++ b/doc/APIchunk14.html
@@ -167,7 +167,9 @@ A:link, A:visited, A:active { text-decoration: underline }
</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 />
-</dd><dt>englobing</dt><dd><a href="html/libxml-valid.html#xmlSnprintfElementContent">xmlSnprintfElementContent</a><br />
+</dd><dt>englobing</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpSubsume">xmlExpSubsume</a><br />
+<a href="html/libxml-valid.html#xmlSnprintfElementContent">xmlSnprintfElementContent</a><br />
<a href="html/libxml-valid.html#xmlSprintfElementContent">xmlSprintfElementContent</a><br />
</dd><dt>enhancements</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
</dd><dt>enough</dt><dd><a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
@@ -254,34 +256,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>errors</dt><dd><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
-<a href="html/libxml-parser.html#_xmlSAXHandler">_xmlSAXHandler</a><br />
-<a href="html/libxml-parser.html#_xmlSAXHandlerV1">_xmlSAXHandlerV1</a><br />
-<a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
-<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
-<a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
-<a href="html/libxml-xmlerror.html#initGenericErrorDefaultFunc">initGenericErrorDefaultFunc</a><br />
-<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
-<a href="html/libxml-xmlIO.html#xmlCheckHTTPInput">xmlCheckHTTPInput</a><br />
-<a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
-<a href="html/libxml-tree.html#xmlDOMWrapReconcileNamespaces">xmlDOMWrapReconcileNamespaces</a><br />
-<a href="html/libxml-tree.html#xmlDOMWrapRemoveNode">xmlDOMWrapRemoveNode</a><br />
-<a href="html/libxml-debugXML.html#xmlDebugCheckDocument">xmlDebugCheckDocument</a><br />
-<a href="html/libxml-hash.html#xmlHashAddEntry">xmlHashAddEntry</a><br />
-<a href="html/libxml-hash.html#xmlHashAddEntry2">xmlHashAddEntry2</a><br />
-<a href="html/libxml-hash.html#xmlHashAddEntry3">xmlHashAddEntry3</a><br />
-<a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
-<a href="html/libxml-relaxng.html#xmlRelaxNGSetParserErrors">xmlRelaxNGSetParserErrors</a><br />
-<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetCanonValue">xmlSchemaGetCanonValue</a><br />
-<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetCanonValueWhtsp">xmlSchemaGetCanonValueWhtsp</a><br />
-<a href="html/libxml-xmlschemas.html#xmlSchemaGetParserErrors">xmlSchemaGetParserErrors</a><br />
-<a href="html/libxml-xmlschemas.html#xmlSchemaIsValid">xmlSchemaIsValid</a><br />
-<a href="html/libxml-xmlschemas.html#xmlSchemaSAXPlug">xmlSchemaSAXPlug</a><br />
-<a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
-<a href="html/libxml-xmlschemastypes.html#xmlSchemaValueAppend">xmlSchemaValueAppend</a><br />
-<a href="html/libxml-xmlschemastypes.html#xmlSchemaValueGetAsString">xmlSchemaValueGetAsString</a><br />
-<a href="html/libxml-xmlschemastypes.html#xmlSchemaValueGetNext">xmlSchemaValueGetNext</a><br />
-<a href="html/libxml-debugXML.html#xmlShellCmd">xmlShellCmd</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 />
@@ -301,6 +275,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>escaping</dt><dd><a href="html/libxml-xmlIO.html#xmlOutputBufferWriteEscape">xmlOutputBufferWriteEscape</a><br />
<a href="html/libxml-xmlsave.html#xmlSaveSetAttrEscape">xmlSaveSetAttrEscape</a><br />
<a href="html/libxml-xmlsave.html#xmlSaveSetEscape">xmlSaveSetEscape</a><br />
+</dd><dt>especially</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
</dd><dt>established</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
</dd><dt>etc</dt><dd><a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
<a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
@@ -327,6 +302,9 @@ A:link, A:visited, A:active { text-decoration: underline }
<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 />
</dd><dt>even</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
<a href="html/libxml-xmlwriter.html#xmlTextWriterFullEndElement">xmlTextWriterFullEndElement</a><br />
@@ -336,10 +314,12 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
</dd><dt>events</dt><dd><a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+</dd><dt>ever</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpCtxtNbCons">xmlExpCtxtNbCons</a><br />
</dd><dt>everywhere</dt><dd><a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
<a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
</dd><dt>exact</dt><dd><a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
+</dd><dt>examined</dt><dd><a href="html/libxml-parser.html#xmlHasFeature">xmlHasFeature</a><br />
</dd><dt>example</dt><dd><a href="html/libxml-xmlIO.html#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a><br />
<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
@@ -348,7 +328,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathTranslateFunction">xmlXPathTranslateFunction</a><br />
</dd><dt>examples</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
-</dd><dt>except</dt><dd><a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
+</dd><dt>except</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
+<a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
<a href="html/libxml-catalog.html#xmlParseCatalogFile">xmlParseCatalogFile</a><br />
<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
@@ -369,7 +350,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlregexp.html#xmlRegExecNextValues">xmlRegExecNextValues</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
-</dd><dt>exist</dt><dd><a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
+</dd><dt>exist</dt><dd><a href="html/libxml-parser.html#xmlHasFeature">xmlHasFeature</a><br />
+<a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
</dd><dt>existent</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
<a href="html/libxml-tree.html#xmlDOMWrapReconcileNamespaces">xmlDOMWrapReconcileNamespaces</a><br />
</dd><dt>exists</dt><dd><a href="html/libxml-dict.html#xmlDictExists">xmlDictExists</a><br />
@@ -389,6 +371,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlschemas.html#xmlSchemaNewMemParserCtxt">xmlSchemaNewMemParserCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaNewParserCtxt">xmlSchemaNewParserCtxt</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateListSimpleTypeFacet">xmlSchemaValidateListSimpleTypeFacet</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewMemParserCtxt">xmlSchematronNewMemParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewParserCtxt">xmlSchematronNewParserCtxt</a><br />
<a href="html/libxml-pattern.html#xmlStreamPush">xmlStreamPush</a><br />
<a href="html/libxml-pattern.html#xmlStreamPushAttr">xmlStreamPushAttr</a><br />
</dd><dt>experimental</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
@@ -397,7 +381,12 @@ 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>expressions</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_REGEXP_ENABLED">LIBXML_REGEXP_ENABLED</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 />
+<a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpSubsume">xmlExpSubsume</a><br />
</dd><dt>exslSetsDistinctSorted</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
</dd><dt>exslSetsLeadingSorted</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathLeading">xmlXPathLeading</a><br />
</dd><dt>exslSetsNodeLeadingSorted</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNodeLeading">xmlXPathNodeLeading</a><br />
diff --git a/doc/APIchunk15.html b/doc/APIchunk15.html
index 02fc03a..a164599 100644
--- a/doc/APIchunk15.html
+++ b/doc/APIchunk15.html
@@ -56,6 +56,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_HAS_FACETS">XML_SCHEMAS_TYPE_HAS_FACETS</a><br />
<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_NORMVALUENEEDED">XML_SCHEMAS_TYPE_NORMVALUENEEDED</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a><br />
+</dd><dt>facility</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpCtxtNbCons">xmlExpCtxtNbCons</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxtNbNodes">xmlExpCtxtNbNodes</a><br />
</dd><dt>fail</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 />
@@ -86,36 +88,6 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
<a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
<a href="html/libxml-xmlIO.html#xmlFileOpen">xmlFileOpen</a><br />
-</dd><dt>failure</dt><dd><a href="html/libxml-xpathInternals.html#CHECK_TYPE0">CHECK_TYPE0</a><br />
-<a href="html/libxml-HTMLtree.html#htmlDocDump">htmlDocDump</a><br />
-<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
-<a href="html/libxml-HTMLtree.html#htmlSaveFile">htmlSaveFile</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#xmlBufferShrink">xmlBufferShrink</a><br />
-<a href="html/libxml-tree.html#xmlDocDump">xmlDocDump</a><br />
-<a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
-<a href="html/libxml-xmlIO.html#xmlFileOpen">xmlFileOpen</a><br />
-<a href="html/libxml-xmlIO.html#xmlFileRead">xmlFileRead</a><br />
-<a href="html/libxml-list.html#xmlListAppend">xmlListAppend</a><br />
-<a href="html/libxml-list.html#xmlListInsert">xmlListInsert</a><br />
-<a href="html/libxml-nanohttp.html#xmlNanoHTTPFetch">xmlNanoHTTPFetch</a><br />
-<a href="html/libxml-nanohttp.html#xmlNanoHTTPMethod">xmlNanoHTTPMethod</a><br />
-<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-nanohttp.html#xmlNanoHTTPSave">xmlNanoHTTPSave</a><br />
-<a href="html/libxml-xmlautomata.html#xmlNewAutomata">xmlNewAutomata</a><br />
-<a href="html/libxml-pattern.html#xmlPatternGetStreamCtxt">xmlPatternGetStreamCtxt</a><br />
-<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
-<a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
-<a href="html/libxml-tree.html#xmlSaveFile">xmlSaveFile</a><br />
-<a href="html/libxml-tree.html#xmlSaveFileEnc">xmlSaveFileEnc</a><br />
-<a href="html/libxml-tree.html#xmlSaveFileTo">xmlSaveFileTo</a><br />
-<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
-<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
-<a href="html/libxml-xmlschemas.html#xmlSchemaGetParserErrors">xmlSchemaGetParserErrors</a><br />
-<a href="html/libxml-xmlschemas.html#xmlSchemaSAXUnplug">xmlSchemaSAXUnplug</a><br />
</dd><dt>fallback</dt><dd><a href="html/libxml-xinclude.html#XINCLUDE_FALLBACK">XINCLUDE_FALLBACK</a><br />
<a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
@@ -140,6 +112,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>favor</dt><dd><a href="html/libxml-valid.html#xmlNewElementContent">xmlNewElementContent</a><br />
</dd><dt>feature</dt><dd><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 />
<a href="html/libxml-parser.html#xmlSetFeature">xmlSetFeature</a><br />
</dd><dt>features</dt><dd><a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
</dd><dt>fed</dt><dd><a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
@@ -207,6 +180,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
</dd><dt>finishing</dt><dd><a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+</dd><dt>finite</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
</dd><dt>firs</dt><dd><a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
</dd><dt>fist</dt><dd><a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
</dd><dt>fit</dt><dd><a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
@@ -227,7 +201,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlreader.html#xmlTextReaderIsValid">xmlTextReaderIsValid</a><br />
</dd><dt>flagged</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
<a href="html/libxml-HTMLtree.html#htmlGetMetaEncoding">htmlGetMetaEncoding</a><br />
-</dd><dt>flags</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
+</dd><dt>flags</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
<a href="html/libxml-tree.html#xmlDOMWrapReconcileNamespaces">xmlDOMWrapReconcileNamespaces</a><br />
<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
<a href="html/libxml-xmlreader.html#xmlReaderForDoc">xmlReaderForDoc</a><br />
@@ -251,7 +226,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
</dd><dt>flushes</dt><dd><a href="html/libxml-xmlIO.html#xmlOutputBufferClose">xmlOutputBufferClose</a><br />
<a href="html/libxml-xmlIO.html#xmlOutputBufferFlush">xmlOutputBufferFlush</a><br />
-</dd><dt>follow</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a><br />
+</dd><dt>follow</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</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-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
@@ -265,6 +241,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>fonctionnalities</dt><dd><a href="html/libxml-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a><br />
<a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
</dd><dt>for:</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaGetCanonValue">xmlSchemaGetCanonValue</a><br />
+</dd><dt>forbid</dt><dd><a href="html/libxml-xpath.html#XML_XPATH_NOVAR">XML_XPATH_NOVAR</a><br />
</dd><dt>force</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
</dd><dt>forced</dt><dd><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
@@ -281,6 +258,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
+</dd><dt>formal</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_EXPR_ENABLED">LIBXML_EXPR_ENABLED</a><br />
</dd><dt>formatted</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatAttribute">xmlTextWriterWriteFormatAttribute</a><br />
<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatAttributeNS">xmlTextWriterWriteFormatAttributeNS</a><br />
<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatCDATA">xmlTextWriterWriteFormatCDATA</a><br />
@@ -333,8 +311,10 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>fragment</dt><dd><a href="html/libxml-uri.html#_xmlURI">_xmlURI</a><br />
<a href="html/libxml-tree.html#xmlNewDocFragment">xmlNewDocFragment</a><br />
<a href="html/libxml-uri.html#xmlParseURI">xmlParseURI</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
<a href="html/libxml-uri.html#xmlParseURIReference">xmlParseURIReference</a><br />
<a href="html/libxml-parserInternals.html#xmlPushInput">xmlPushInput</a><br />
+</dd><dt>fragments</dt><dd><a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
</dd><dt>freeing</dt><dd><a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
<a href="html/libxml-parser.html#xmlParserInputDeallocate">xmlParserInputDeallocate</a><br />
</dd><dt>frees</dt><dd><a href="html/libxml-tree.html#xmlBufferFree">xmlBufferFree</a><br />
@@ -399,9 +379,11 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-relaxng.html#xmlRelaxNGGetValidErrors">xmlRelaxNGGetValidErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGSetParserErrors">xmlRelaxNGSetParserErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidErrors">xmlRelaxNGSetValidErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidStructuredErrors">xmlRelaxNGSetValidStructuredErrors</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaGetValidErrors">xmlSchemaGetValidErrors</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</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-debugXML.html#xmlShellCmd">xmlShellCmd</a><br />
<a href="html/libxml-parserInternals.html#xmlSwitchEncoding">xmlSwitchEncoding</a><br />
<a href="html/libxml-parserInternals.html#xmlSwitchInputEncoding">xmlSwitchInputEncoding</a><br />
diff --git a/doc/APIchunk16.html b/doc/APIchunk16.html
index fcc3552..bb433a9 100644
--- a/doc/APIchunk16.html
+++ b/doc/APIchunk16.html
@@ -101,10 +101,10 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>generates</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegexpExec">xmlRegexpExec</a><br />
</dd><dt>generating</dt><dd><a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
<a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
<a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegExecErrInfo">xmlRegExecErrInfo</a><br />
</dd><dt>generic</dt><dd><a href="html/libxml-xmlerror.html#initGenericErrorDefaultFunc">initGenericErrorDefaultFunc</a><br />
-<a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
<a href="html/libxml-debugXML.html#xmlShellCmd">xmlShellCmd</a><br />
<a href="html/libxml-debugXML.html#xmlShellReadlineFunc">xmlShellReadlineFunc</a><br />
</dd><dt>get</dt><dd><a href="html/libxml-parser.html#_xmlSAXHandler">_xmlSAXHandler</a><br />
diff --git a/doc/APIchunk17.html b/doc/APIchunk17.html
index 06eda37..b797ffd 100644
--- a/doc/APIchunk17.html
+++ b/doc/APIchunk17.html
@@ -246,6 +246,9 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>indirectly</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+</dd><dt>infinite</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
</dd><dt>infinity</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathCeilingFunction">xmlXPathCeilingFunction</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathFloorFunction">xmlXPathFloorFunction</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
@@ -384,12 +387,14 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>insertion</dt><dd><a href="html/libxml-HTMLparser.html#htmlHandleOmittedElem">htmlHandleOmittedElem</a><br />
<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
</dd><dt>inspect</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpObject">xmlXPathDebugDumpObject</a><br />
+</dd><dt>instace</dt><dd><a href="html/libxml-schematron.html#xmlSchematronValidateDoc">xmlSchematronValidateDoc</a><br />
</dd><dt>installed</dt><dd><a href="html/libxml-dict.html#xmlDictSize">xmlDictSize</a><br />
<a href="html/libxml-hash.html#xmlHashSize">xmlHashSize</a><br />
</dd><dt>instances</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
<a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronParse">xmlSchematronParse</a><br />
</dd><dt>instead</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_TOPLEVEL">XML_SCHEMAS_ELEM_TOPLEVEL</a><br />
<a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
<a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
@@ -417,6 +422,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlNewPI">xmlNewPI</a><br />
<a href="html/libxml-SAX2.html#xmlSAX2ProcessingInstruction">xmlSAX2ProcessingInstruction</a><br />
</dd><dt>insufficient</dt><dd><a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
+</dd><dt>intact</dt><dd><a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
</dd><dt>integer</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcasecmp">xmlStrcasecmp</a><br />
<a href="html/libxml-xmlstring.html#xmlStrcmp">xmlStrcmp</a><br />
<a href="html/libxml-xmlstring.html#xmlStrncasecmp">xmlStrncasecmp</a><br />
@@ -441,16 +447,19 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
</dd><dt>interfaces</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_AUTOMATA_ENABLED">LIBXML_AUTOMATA_ENABLED</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_EXPR_ENABLED">LIBXML_EXPR_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_MODULES_ENABLED">LIBXML_MODULES_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_PUSH_ENABLED">LIBXML_PUSH_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_REGEXP_ENABLED">LIBXML_REGEXP_ENABLED</a><br />
<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_UNICODE_ENABLED">LIBXML_UNICODE_ENABLED</a><br />
<a href="html/libxml-parserInternals.html#xmlNamespaceParseNCName">xmlNamespaceParseNCName</a><br />
<a href="html/libxml-parserInternals.html#xmlNamespaceParseNSDef">xmlNamespaceParseNSDef</a><br />
<a href="html/libxml-parserInternals.html#xmlNamespaceParseQName">xmlNamespaceParseQName</a><br />
</dd><dt>intern</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderConstString">xmlTextReaderConstString</a><br />
</dd><dt>internally</dt><dd><a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
<a href="html/libxml-valid.html#xmlRemoveID">xmlRemoveID</a><br />
<a href="html/libxml-valid.html#xmlRemoveRef">xmlRemoveRef</a><br />
diff --git a/doc/APIchunk18.html b/doc/APIchunk18.html
index 43fd538..8bc0157 100644
--- a/doc/APIchunk18.html
+++ b/doc/APIchunk18.html
@@ -54,7 +54,11 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xpathInternals.html#xmlXPathNewParserContext">xmlXPathNewParserContext</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
<a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
-</dd></dl><h2>Letter k:</h2><dl><dt>keep</dt><dd><a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
+</dd></dl><h2>Letter k:</h2><dl><dt>keep</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
+<a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
<a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
@@ -106,6 +110,9 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>language</dt><dd><a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
<a href="html/libxml-tree.html#xmlNodeSetLang">xmlNodeSetLang</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
+</dd><dt>languages</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpSubsume">xmlExpSubsume</a><br />
</dd><dt>large</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
<a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
</dd><dt>largest</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathFloorFunction">xmlXPathFloorFunction</a><br />
@@ -143,12 +150,15 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
</dd><dt>least</dt><dd><a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
-</dd><dt>left</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+</dd><dt>left</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
</dd><dt>legacy</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
</dd><dt>len</dt><dd><a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
<a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
<a href="html/libxml-xmlstring.html#xmlCharStrndup">xmlCharStrndup</a><br />
<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
<a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
<a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
<a href="html/libxml-tree.html#xmlNewDocTextLen">xmlNewDocTextLen</a><br />
@@ -159,11 +169,15 @@ 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-relaxng.html#xmlRelaxNGValidatePushCData">xmlRelaxNGValidatePushCData</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-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</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 />
<a href="html/libxml-xpathInternals.html#xmlXPathCeilingFunction">xmlXPathCeilingFunction</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
@@ -200,12 +214,14 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
</dd><dt>lib</dt><dd><a href="html/libxml-xmlversion.html#xmlCheckVersion">xmlCheckVersion</a><br />
</dd><dt>libc</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
-</dd><dt>libraries</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGInitTypes">xmlRelaxNGInitTypes</a><br />
+</dd><dt>libraries</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_MODULE_EXTENSION">LIBXML_MODULE_EXTENSION</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGInitTypes">xmlRelaxNGInitTypes</a><br />
</dd><dt>library</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
<a href="html/libxml-schemasInternals.html#_xmlSchema">_xmlSchema</a><br />
<a href="html/libxml-xmlmemory.html#xmlCleanupMemory">xmlCleanupMemory</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-parser.html#xmlHasFeature">xmlHasFeature</a><br />
<a href="html/libxml-threads.html#xmlInitThreads">xmlInitThreads</a><br />
<a href="html/libxml-globals.html#xmlInitializeGlobalState">xmlInitializeGlobalState</a><br />
<a href="html/libxml-threads.html#xmlLockLibrary">xmlLockLibrary</a><br />
@@ -245,6 +261,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 />
</dd><dt>lifetime</dt><dd><a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxtNbCons">xmlExpCtxtNbCons</a><br />
</dd><dt>like</dt><dd><a href="html/libxml-parserInternals.html#IS_CHAR_CH">IS_CHAR_CH</a><br />
<a href="html/libxml-parserInternals.html#IS_DIGIT_CH">IS_DIGIT_CH</a><br />
<a href="html/libxml-parserInternals.html#IS_EXTENDER_CH">IS_EXTENDER_CH</a><br />
@@ -266,6 +283,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>limited</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</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>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 />
@@ -318,6 +336,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-nanohttp.html#xmlNanoHTTPOpenRedir">xmlNanoHTTPOpenRedir</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGNewParserCtxt">xmlRelaxNGNewParserCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaNewParserCtxt">xmlSchemaNewParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewParserCtxt">xmlSchematronNewParserCtxt</a><br />
<a href="html/libxml-parser.html#xmlSetFeature">xmlSetFeature</a><br />
<a href="html/libxml-xmlstring.html#xmlUTF8Strloc">xmlUTF8Strloc</a><br />
<a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
@@ -372,6 +391,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>lossless</dt><dd><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 />
+</dd><dt>lower</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
</dd><dt>lowercase</dt><dd><a href="html/libxml-HTMLparser.html#htmlTagLookup">htmlTagLookup</a><br />
<a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
</dd></dl><h2 align="center"><a href="APIchunk0.html">A-B</a>
diff --git a/doc/APIchunk19.html b/doc/APIchunk19.html
index db7fbf2..cecaf32 100644
--- a/doc/APIchunk19.html
+++ b/doc/APIchunk19.html
@@ -43,6 +43,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteProcessingInstruction">xmlTextWriterWriteProcessingInstruction</a><br />
</dd><dt>made</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_ISO8859X_ENABLED">LIBXML_ISO8859X_ENABLED</a><br />
<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</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-parserInternals.html#xmlSetEntityReferenceFunc">xmlSetEntityReferenceFunc</a><br />
@@ -74,7 +75,8 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>manages</dt><dd><a href="html/libxml-tree.html#xmlBufferWriteCHAR">xmlBufferWriteCHAR</a><br />
</dd><dt>mandatory</dt><dd><a href="html/libxml-parserInternals.html#xmlParseTextDecl">xmlParseTextDecl</a><br />
</dd><dt>manipulated</dt><dd><a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
-</dd><dt>manipulating</dt><dd><a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
+</dd><dt>manipulating</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
+<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
</dd><dt>manipulation</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_TREE_ENABLED">LIBXML_TREE_ENABLED</a><br />
</dd><dt>many</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
@@ -128,6 +130,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
</dd><dt>max</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
<a href="html/libxml-xpath.html#_xmlXPathParserContext">_xmlXPathParserContext</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
<a href="html/libxml-tree.html#xmlGetCompressMode">xmlGetCompressMode</a><br />
<a href="html/libxml-tree.html#xmlGetDocCompressMode">xmlGetDocCompressMode</a><br />
<a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
@@ -143,8 +146,12 @@ 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-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpMaxToken">xmlExpMaxToken</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
<a href="html/libxml-pattern.html#xmlPatternMaxDepth">xmlPatternMaxDepth</a><br />
-</dd><dt>means</dt><dd><a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+</dd><dt>mean</dt><dd><a href="html/libxml-pattern.html#xmlPatternMinDepth">xmlPatternMinDepth</a><br />
+</dd><dt>means</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</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-pattern.html#xmlStreamPush">xmlStreamPush</a><br />
<a href="html/libxml-pattern.html#xmlStreamPushAttr">xmlStreamPushAttr</a><br />
@@ -214,9 +221,11 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
</dd><dt>might</dt><dd><a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
</dd><dt>migrate</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+</dd><dt>min</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
</dd><dt>minLength</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateLengthFacet">xmlSchemaValidateLengthFacet</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateLengthFacetWhtsp">xmlSchemaValidateLengthFacetWhtsp</a><br />
</dd><dt>minimal</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCounter">xmlAutomataNewCounter</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
</dd><dt>minimum</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans2">xmlAutomataNewCountTrans2</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
@@ -224,6 +233,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlBufferGrow">xmlBufferGrow</a><br />
<a href="html/libxml-tree.html#xmlBufferResize">xmlBufferResize</a><br />
<a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMinDepth">xmlPatternMinDepth</a><br />
</dd><dt>minus</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
</dd><dt>minute</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
</dd><dt>misleading</dt><dd><a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
@@ -256,6 +266,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlNodeSetContent">xmlNodeSetContent</a><br />
<a href="html/libxml-tree.html#xmlNodeSetContentLen">xmlNodeSetContentLen</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaNewDocParserCtxt">xmlSchemaNewDocParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewDocParserCtxt">xmlSchematronNewDocParserCtxt</a><br />
</dd><dt>modifies</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
</dd><dt>modify</dt><dd><a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
</dd><dt>module</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_DEBUG_ENABLED">LIBXML_DEBUG_ENABLED</a><br />
@@ -267,11 +278,13 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
<a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
<a href="html/libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a><br />
+</dd><dt>modules</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_MODULE_EXTENSION">LIBXML_MODULE_EXTENSION</a><br />
</dd><dt>moment</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapReconcileNamespaces">xmlDOMWrapReconcileNamespaces</a><br />
<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-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</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 />
<a href="html/libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a><br />
<a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
diff --git a/doc/APIchunk2.html b/doc/APIchunk2.html
index 3127bc7..b0f3780 100644
--- a/doc/APIchunk2.html
+++ b/doc/APIchunk2.html
@@ -108,8 +108,11 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlschemas.html#xmlSchemaFree">xmlSchemaFree</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaFreeFacet">xmlSchemaFreeFacet</a><br />
<a href="html/libxml-schemasInternals.html#xmlSchemaFreeType">xmlSchemaFreeType</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronFree">xmlSchematronFree</a><br />
</dd><dt>Deallocates</dt><dd><a href="html/libxml-schemasInternals.html#xmlSchemaFreeWildcard">xmlSchemaFreeWildcard</a><br />
</dd><dt>Debugging</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_DEBUG_ENABLED">LIBXML_DEBUG_ENABLED</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxtNbCons">xmlExpCtxtNbCons</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxtNbNodes">xmlExpCtxtNbNodes</a><br />
</dd><dt>Declaration</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementDecl">xmlParseElementDecl</a><br />
<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
<a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
@@ -140,6 +143,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-valid.html#xmlSprintfElementContent">xmlSprintfElementContent</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 />
+</dd><dt>Dereference</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpFree">xmlExpFree</a><br />
</dd><dt>DeregisterNodeFunc</dt><dd><a href="html/libxml-globals.html#xmlDeregisterNodeDefault">xmlDeregisterNodeDefault</a><br />
</dd><dt>Deseret</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsDeseret">xmlUCSIsDeseret</a><br />
</dd><dt>Determine</dt><dd><a href="html/libxml-HTMLtree.html#htmlIsBooleanAttr">htmlIsBooleanAttr</a><br />
@@ -358,11 +362,13 @@ 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#xmlXPtrEval">xmlXPtrEval</a><br />
<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
-</dd><dt>Evaluates</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaIsBuiltInTypeFacet">xmlSchemaIsBuiltInTypeFacet</a><br />
+</dd><dt>Evaluates</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaIsBuiltInTypeFacet">xmlSchemaIsBuiltInTypeFacet</a><br />
</dd><dt>Everything</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
<a href="html/libxml-SAX.html#setDocumentLocator">setDocumentLocator</a><br />
<a href="html/libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a><br />
<a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a><br />
+</dd><dt>Examines</dt><dd><a href="html/libxml-parser.html#xmlHasFeature">xmlHasFeature</a><br />
</dd><dt>Exclusive</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 />
@@ -394,7 +400,6 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-catalog.html#xmlCatalogLocalResolve">xmlCatalogLocalResolve</a><br />
<a href="html/libxml-catalog.html#xmlCatalogResolve">xmlCatalogResolve</a><br />
<a href="html/libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</a><br />
-<a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
<a href="html/libxml-parser.html#xmlParseDTD">xmlParseDTD</a><br />
<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
diff --git a/doc/APIchunk20.html b/doc/APIchunk20.html
index 198ff0d..01db33a 100644
--- a/doc/APIchunk20.html
+++ b/doc/APIchunk20.html
@@ -54,7 +54,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xinclude.html#XINCLUDE_OLD_NS">XINCLUDE_OLD_NS</a><br />
<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
-</dd><dt>namespaces</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>namespaces</dt><dd><a href="html/libxml-xpath.html#XML_XPATH_CHECKNS">XML_XPATH_CHECKNS</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
<a href="html/libxml-schemasInternals.html#_xmlSchemaWildcard">_xmlSchemaWildcard</a><br />
<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
<a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
@@ -172,6 +173,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlreader.html#xmlReaderNewFile">xmlReaderNewFile</a><br />
</dd><dt>nice</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
</dd><dt>nillable</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_NILLABLE">XML_SCHEMAS_ELEM_NILLABLE</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpIsNillable">xmlExpIsNillable</a><br />
</dd><dt>nod</dt><dd><a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
</dd><dt>node-</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapRemoveNode">xmlDOMWrapRemoveNode</a><br />
<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
@@ -209,6 +211,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>non-validating</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
</dd><dt>non-zero</dt><dd><a href="html/libxml-SAX.html#initxmlDefaultSAXHandler">initxmlDefaultSAXHandler</a><br />
+<a href="html/libxml-parser.html#xmlHasFeature">xmlHasFeature</a><br />
<a href="html/libxml-parserInternals.html#xmlIsLetter">xmlIsLetter</a><br />
<a href="html/libxml-SAX2.html#xmlSAX2InitDefaultSAXHandler">xmlSAX2InitDefaultSAXHandler</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathBooleanFunction">xmlXPathBooleanFunction</a><br />
diff --git a/doc/APIchunk21.html b/doc/APIchunk21.html
index 8a44503..6789f9d 100644
--- a/doc/APIchunk21.html
+++ b/doc/APIchunk21.html
@@ -190,6 +190,9 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
</dd><dt>operation</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
<a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathAddValues">xmlXPathAddValues</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
@@ -206,8 +209,10 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>operations</dt><dd><a href="html/libxml-xmlmodule.html#xmlModuleClose">xmlModuleClose</a><br />
<a href="html/libxml-xmlmodule.html#xmlModuleFree">xmlModuleFree</a><br />
<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
-</dd><dt>operator</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
-</dd><dt>operators</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathAddValues">xmlXPathAddValues</a><br />
+</dd><dt>operator</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
+</dd><dt>operators</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</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#xmlXPathModValues">xmlXPathModValues</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathMultValues">xmlXPathMultValues</a><br />
@@ -224,6 +229,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a><br />
<a href="html/libxml-parser.html#xmlCtxtResetPush">xmlCtxtResetPush</a><br />
<a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
<a href="html/libxml-list.html#xmlListCreate">xmlListCreate</a><br />
<a href="html/libxml-nanoftp.html#xmlNanoFTPList">xmlNanoFTPList</a><br />
<a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
@@ -277,6 +283,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-encoding.html#xmlGetEncodingAlias">xmlGetEncodingAlias</a><br />
<a href="html/libxml-list.html#xmlListMerge">xmlListMerge</a><br />
<a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</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-debugXML.html#xmlShellSave">xmlShellSave</a><br />
@@ -288,6 +295,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
<a href="html/libxml-HTMLparser.html#htmlIsAutoClosed">htmlIsAutoClosed</a><br />
<a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
<a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
@@ -328,6 +336,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlwriter.html#xmlNewTextWriterPushParser">xmlNewTextWriterPushParser</a><br />
<a href="html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a><br />
</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-SAX.html#resolveEntity">resolveEntity</a><br />
<a href="html/libxml-parser.html#resolveEntitySAXFunc">resolveEntitySAXFunc</a><br />
diff --git a/doc/APIchunk22.html b/doc/APIchunk22.html
index b1a6e91..42008e7 100644
--- a/doc/APIchunk22.html
+++ b/doc/APIchunk22.html
@@ -89,6 +89,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlreader.html#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a><br />
</dd><dt>passed</dt><dd><a href="html/libxml-xpathInternals.html#CHECK_ARITY">CHECK_ARITY</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition">xmlAutomataNewTransition</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition2">xmlAutomataNewTransition2</a><br />
<a href="html/libxml-hash.html#xmlHashScan">xmlHashScan</a><br />
@@ -132,6 +133,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-pattern.html#xmlPatternGetStreamCtxt">xmlPatternGetStreamCtxt</a><br />
<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
<a href="html/libxml-pattern.html#xmlPatternMaxDepth">xmlPatternMaxDepth</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMinDepth">xmlPatternMinDepth</a><br />
<a href="html/libxml-pattern.html#xmlPatternStreamable">xmlPatternStreamable</a><br />
<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacetWhtsp">xmlSchemaValidateFacetWhtsp</a><br />
@@ -157,6 +159,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>piece</dt><dd><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 />
+</dd><dt>pieces</dt><dd><a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
</dd><dt>place</dt><dd><a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
<a href="html/libxml-xmlerror.html#xmlCopyError">xmlCopyError</a><br />
<a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
@@ -242,10 +245,12 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-pattern.html#xmlPatternGetStreamCtxt">xmlPatternGetStreamCtxt</a><br />
<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
<a href="html/libxml-pattern.html#xmlPatternMaxDepth">xmlPatternMaxDepth</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMinDepth">xmlPatternMinDepth</a><br />
<a href="html/libxml-pattern.html#xmlPatternStreamable">xmlPatternStreamable</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGNewValidCtxt">xmlRelaxNGNewValidCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaNewValidCtxt">xmlSchemaNewValidCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewValidCtxt">xmlSchematronNewValidCtxt</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderSetSchema">xmlTextReaderSetSchema</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpCompExpr">xmlXPathDebugDumpCompExpr</a><br />
@@ -287,6 +292,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlreader.html#xmlReaderWalker">xmlReaderWalker</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaNewDocParserCtxt">xmlSchemaNewDocParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewDocParserCtxt">xmlSchematronNewDocParserCtxt</a><br />
</dd><dt>prepend</dt><dd><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
</dd><dt>present</dt><dd><a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
<a href="html/libxml-dict.html#xmlDictLookup">xmlDictLookup</a><br />
@@ -379,6 +385,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaNewDocParserCtxt">xmlSchemaNewDocParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewDocParserCtxt">xmlSchematronNewDocParserCtxt</a><br />
<a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
<a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
<a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
@@ -483,6 +490,8 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>provides</dt><dd><a href="html/libxml-parser.html#endElementNsSAX2Func">endElementNsSAX2Func</a><br />
<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
<a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxtNbCons">xmlExpCtxtNbCons</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxtNbNodes">xmlExpCtxtNbNodes</a><br />
<a href="html/libxml-SAX2.html#xmlSAX2EndElementNs">xmlSAX2EndElementNs</a><br />
<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderByteConsumed">xmlTextReaderByteConsumed</a><br />
diff --git a/doc/APIchunk23.html b/doc/APIchunk23.html
index 5bd99db..a9194f7 100644
--- a/doc/APIchunk23.html
+++ b/doc/APIchunk23.html
@@ -73,6 +73,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
<a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
<a href="html/libxml-chvalid.html#xmlCharInRange">xmlCharInRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
<a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a><br />
<a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
@@ -109,6 +110,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
<a href="html/libxml-threads.html#xmlUnlockLibrary">xmlUnlockLibrary</a><br />
</dd><dt>reachable</dt><dd><a href="html/libxml-pattern.html#xmlPatternMaxDepth">xmlPatternMaxDepth</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMinDepth">xmlPatternMinDepth</a><br />
</dd><dt>reached</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
</dd><dt>read-only</dt><dd><a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
@@ -138,6 +140,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
<a href="html/libxml-entities.html#xmlCreateEntitiesTable">xmlCreateEntitiesTable</a><br />
</dd><dt>reasonable</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
+</dd><dt>receive</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpDump">xmlExpDump</a><br />
</dd><dt>received</dt><dd><a href="html/libxml-nanoftp.html#ftpDataCallback">ftpDataCallback</a><br />
<a href="html/libxml-nanohttp.html#xmlNanoHTTPReturnCode">xmlNanoHTTPReturnCode</a><br />
</dd><dt>receives</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
@@ -273,6 +276,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlregexp.html#xmlRegFreeRegexp">xmlRegFreeRegexp</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegexpPrint">xmlRegexpPrint</a><br />
+</dd><dt>regexps</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
</dd><dt>register</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathRegisterVariableLookup">xmlXPathRegisterVariableLookup</a><br />
</dd><dt>registered</dt><dd><a href="html/libxml-xmlerror.html#xmlCtxtGetLastError">xmlCtxtGetLastError</a><br />
<a href="html/libxml-xmlerror.html#xmlCtxtResetLastError">xmlCtxtResetLastError</a><br />
@@ -321,10 +325,14 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlstring.html#xmlUTF8Strloc">xmlUTF8Strloc</a><br />
<a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
</dd><dt>relativeURI</dt><dd><a href="html/libxml-uri.html#xmlParseURI">xmlParseURI</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
<a href="html/libxml-uri.html#xmlParseURIReference">xmlParseURIReference</a><br />
</dd><dt>release</dt><dd><a href="html/libxml-parser.html#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a><br />
<a href="html/libxml-parser.html#xmlClearParserCtxt">xmlClearParserCtxt</a><br />
<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
<a href="html/libxml-threads.html#xmlUnlockLibrary">xmlUnlockLibrary</a><br />
</dd><dt>releases</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderClose">xmlTextReaderClose</a><br />
</dd><dt>reliable</dt><dd><a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
@@ -376,6 +384,8 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>removing</dt><dd><a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
</dd><dt>rename</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
</dd><dt>repeat</dt><dd><a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+</dd><dt>repeated</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+</dd><dt>repetition</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
</dd><dt>replace</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_REPLACE">XML_SCHEMAS_FACET_REPLACE</a><br />
<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_WHITESPACE_REPLACE">XML_SCHEMAS_TYPE_WHITESPACE_REPLACE</a><br />
<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
@@ -430,6 +440,7 @@ 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#xmlNanoHTTPReturnCode">xmlNanoHTTPReturnCode</a><br />
</dd><dt>requested</dt><dd><a href="html/libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</a><br />
+<a href="html/libxml-parser.html#xmlHasFeature">xmlHasFeature</a><br />
<a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
<a href="html/libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a><br />
<a href="html/libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a><br />
@@ -495,8 +506,11 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-relaxng.html#xmlRelaxNGFreeValidCtxt">xmlRelaxNGFreeValidCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaFreeParserCtxt">xmlSchemaFreeParserCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaFreeValidCtxt">xmlSchemaFreeValidCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronFreeParserCtxt">xmlSchematronFreeParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronFreeValidCtxt">xmlSchematronFreeValidCtxt</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderClose">xmlTextReaderClose</a><br />
<a href="html/libxml-xinclude.html#xmlXIncludeSetFlags">xmlXIncludeSetFlags</a><br />
+</dd><dt>respect</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
</dd><dt>respecting</dt><dd><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
</dd><dt>response</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPCheckResponse">xmlNanoFTPCheckResponse</a><br />
<a href="html/libxml-nanoftp.html#xmlNanoFTPGetResponse">xmlNanoFTPGetResponse</a><br />
@@ -558,6 +572,8 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>rewrite</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
</dd><dt>right</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
<a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
<a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
<a href="html/libxml-tree.html#xmlSetListDoc">xmlSetListDoc</a><br />
<a href="html/libxml-tree.html#xmlSetTreeDoc">xmlSetTreeDoc</a><br />
diff --git a/doc/APIchunk24.html b/doc/APIchunk24.html
index 2d52d0d..986d998 100644
--- a/doc/APIchunk24.html
+++ b/doc/APIchunk24.html
@@ -129,7 +129,9 @@ 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-schematron.html#xmlSchematronNewMemParserCtxt">xmlSchematronNewMemParserCtxt</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderSchemaValidate">xmlTextReaderSchemaValidate</a><br />
+</dd><dt>schematron</dt><dd><a href="html/libxml-schematron.html#xmlSchematronValidateDoc">xmlSchematronValidateDoc</a><br />
</dd><dt>scheme</dt><dd><a href="html/libxml-uri.html#_xmlURI">_xmlURI</a><br />
<a href="html/libxml-tree.html#xmlBufferSetAllocationScheme">xmlBufferSetAllocationScheme</a><br />
<a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
@@ -173,7 +175,8 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>selection</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_PATTERN_ENABLED">LIBXML_PATTERN_ENABLED</a><br />
</dd><dt>selects</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
</dd><dt>self</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
-</dd><dt>semantic</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a><br />
+</dd><dt>semantic</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
+<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a><br />
</dd><dt>sense</dt><dd><a href="html/libxml-entities.html#xmlCreateEntitiesTable">xmlCreateEntitiesTable</a><br />
</dd><dt>separated</dt><dd><a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
</dd><dt>separately</dt><dd><a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
@@ -189,6 +192,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
<a href="html/libxml-parser.html#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a><br />
<a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
<a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
<a href="html/libxml-parser.html#xmlInitNodeInfoSeq">xmlInitNodeInfoSeq</a><br />
<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
@@ -202,10 +207,12 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
</dd><dt>sequences</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</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-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+</dd><dt>sequqnce</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpIsNillable">xmlExpIsNillable</a><br />
</dd><dt>serialization</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_OUTPUT_ENABLED">LIBXML_OUTPUT_ENABLED</a><br />
<a href="html/libxml-xmlsave.html#xmlSaveToFd">xmlSaveToFd</a><br />
<a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
@@ -256,7 +263,8 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>shadowed</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
<a href="html/libxml-tree.html#xmlDOMWrapReconcileNamespaces">xmlDOMWrapReconcileNamespaces</a><br />
</dd><dt>shall</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
-</dd><dt>shared</dt><dd><a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+</dd><dt>shared</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_MODULE_EXTENSION">LIBXML_MODULE_EXTENSION</a><br />
+<a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
<a href="html/libxml-xmlmodule.html#xmlModuleFree">xmlModuleFree</a><br />
<a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
</dd><dt>shares</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathHasSameNodes">xmlXPathHasSameNodes</a><br />
@@ -398,6 +406,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xinclude.html#xmlXIncludeProcessNode">xmlXIncludeProcessNode</a><br />
<a href="html/libxml-xinclude.html#xmlXIncludeProcessTree">xmlXIncludeProcessTree</a><br />
<a href="html/libxml-xinclude.html#xmlXIncludeProcessTreeFlags">xmlXIncludeProcessTreeFlags</a><br />
+</dd><dt>sometimes</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
</dd><dt>somewhat</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
</dd><dt>sorted</dt><dd><a href="html/libxml-parser.html#xmlParserAddNodeInfo">xmlParserAddNodeInfo</a><br />
<a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
@@ -517,10 +526,12 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parser.html#startElementNsSAX2Func">startElementNsSAX2Func</a><br />
<a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
<a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
<a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</a><br />
<a href="html/libxml-SAX2.html#xmlSAX2StartDocument">xmlSAX2StartDocument</a><br />
<a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderByteConsumed">xmlTextReaderByteConsumed</a><br />
<a href="html/libxml-valid.html#xmlValidatePushElement">xmlValidatePushElement</a><br />
<a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
@@ -534,6 +545,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCountedTrans">xmlAutomataNewCountedTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewEpsilon">xmlAutomataNewEpsilon</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition">xmlAutomataNewTransition</a><br />
@@ -574,7 +586,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlSaveFile">xmlSaveFile</a><br />
<a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
<a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
-</dd><dt>step</dt><dd><a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
+</dd><dt>step</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</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#xmlValidateDocumentFinal">xmlValidateDocumentFinal</a><br />
<a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
@@ -598,6 +611,8 @@ 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#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a><br />
<a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</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-parser.html#xmlGetFeature">xmlGetFeature</a><br />
<a href="html/libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a><br />
<a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
@@ -645,6 +660,9 @@ 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-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 />
<a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegExecErrInfo">xmlRegExecErrInfo</a><br />
@@ -670,7 +688,9 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlschemastypes.html#xmlSchemaNewNOTATIONValue">xmlSchemaNewNOTATIONValue</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaNewQNameValue">xmlSchemaNewQNameValue</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaNewStringValue">xmlSchemaNewStringValue</a><br />
-</dd><dt>structured</dt><dd><a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+</dd><dt>structured</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGSetValidStructuredErrors">xmlRelaxNGSetValidStructuredErrors</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidStructuredErrors">xmlSchemaSetValidStructuredErrors</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
</dd><dt>structures</dt><dd><a href="html/libxml-tree.html#xmlFreeDoc">xmlFreeDoc</a><br />
<a href="html/libxml-tree.html#xmlFreeNs">xmlFreeNs</a><br />
<a href="html/libxml-tree.html#xmlFreeNsList">xmlFreeNsList</a><br />
@@ -679,15 +699,20 @@ A:link, A:visited, A:active { text-decoration: underline }
<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 />
+<a href="html/libxml-schematron.html#xmlSchematronParse">xmlSchematronParse</a><br />
</dd><dt>stuff</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
<a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
</dd><dt>style</dt><dd><a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
+</dd><dt>sub</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
</dd><dt>sub-elements</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
</dd><dt>subelement</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
<a href="html/libxml-HTMLparser.html#htmlDefaultSubelement">htmlDefaultSubelement</a><br />
<a href="html/libxml-valid.html#xmlNewDocElementContent">xmlNewDocElementContent</a><br />
<a href="html/libxml-valid.html#xmlNewElementContent">xmlNewElementContent</a><br />
</dd><dt>subelements</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+</dd><dt>subexpression</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpSubsume">xmlExpSubsume</a><br />
+</dd><dt>subexpressions</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
</dd><dt>subject</dt><dd><a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
@@ -799,6 +824,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xpathInternals.html#xmlXPathLangFunction">xmlXPathLangFunction</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathRoundFunction">xmlXPathRoundFunction</a><br />
+</dd><dt>suffix</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_MODULE_EXTENSION">LIBXML_MODULE_EXTENSION</a><br />
</dd><dt>suggested</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
</dd><dt>suitable</dt><dd><a href="html/libxml-parser.html#xmlNewIOInputStream">xmlNewIOInputStream</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegexpCompile">xmlRegexpCompile</a><br />
diff --git a/doc/APIchunk25.html b/doc/APIchunk25.html
index e958d91..98b46a8 100644
--- a/doc/APIchunk25.html
+++ b/doc/APIchunk25.html
@@ -61,6 +61,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
</dd><dt>take</dt><dd><a href="html/libxml-threads.html#xmlLockLibrary">xmlLockLibrary</a><br />
</dd><dt>takes</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacetWhtsp">xmlSchemaValidateFacetWhtsp</a><br />
+</dd><dt>tatkes</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
</dd><dt>tell</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 />
<a href="html/libxml-parser.html#XML_SKIP_IDS">XML_SKIP_IDS</a><br />
@@ -72,6 +73,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlIO.html#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a><br />
</dd><dt>terminal</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegExecErrInfo">xmlRegExecErrInfo</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegExecNextValues">xmlRegExecNextValues</a><br />
+</dd><dt>terminals</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
</dd><dt>terminated</dt><dd><a href="html/libxml-HTMLparser.html#htmlCtxtReadDoc">htmlCtxtReadDoc</a><br />
<a href="html/libxml-HTMLparser.html#htmlReadDoc">htmlReadDoc</a><br />
<a href="html/libxml-SAX.html#startElement">startElement</a><br />
@@ -80,6 +82,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlBufferCat">xmlBufferCat</a><br />
<a href="html/libxml-parser.html#xmlCtxtReadDoc">xmlCtxtReadDoc</a><br />
<a href="html/libxml-tree.html#xmlDocDumpMemory">xmlDocDumpMemory</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteEscape">xmlOutputBufferWriteEscape</a><br />
<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
@@ -101,6 +104,9 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>text-node</dt><dd><a href="html/libxml-tree.html#xmlIsBlankNode">xmlIsBlankNode</a><br />
</dd><dt>textDecl?</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalSubset">xmlParseExternalSubset</a><br />
</dd><dt>than</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</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-tree.html#xmlNewNs">xmlNewNs</a><br />
<a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
@@ -131,7 +137,11 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xpathInternals.html#xmlXPathMultValues">xmlXPathMultValues</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathSubValues">xmlXPathSubValues</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathValueFlipSign">xmlXPathValueFlipSign</a><br />
-</dd><dt>them</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPRead">xmlNanoFTPRead</a><br />
+</dd><dt>them</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#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
+<a href="html/libxml-nanoftp.html#xmlNanoFTPRead">xmlNanoFTPRead</a><br />
<a href="html/libxml-nanohttp.html#xmlNanoHTTPRead">xmlNanoHTTPRead</a><br />
<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
<a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
@@ -185,7 +195,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xpathInternals.html#xmlXPathNextAncestor">xmlXPathNextAncestor</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathNextAncestorOrSelf">xmlXPathNextAncestorOrSelf</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathNextDescendantOrSelf">xmlXPathNextDescendantOrSelf</a><br />
-</dd><dt>time</dt><dd><a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+</dd><dt>time</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
</dd><dt>title</dt><dd><a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
</dd><dt>titles</dt><dd><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
<a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a><br />
@@ -203,7 +214,9 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>token_r</dt><dd><a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
<a href="html/libxml-threads.html#xmlRMutexLock">xmlRMutexLock</a><br />
<a href="html/libxml-threads.html#xmlRMutexUnlock">xmlRMutexUnlock</a><br />
-</dd><dt>tokens</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEnumerationType">xmlParseEnumerationType</a><br />
+</dd><dt>tokens</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-parserInternals.html#xmlParseEnumerationType">xmlParseEnumerationType</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
</dd><dt>too</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
<a href="html/libxml-HTMLtree.html#htmlNodeDump">htmlNodeDump</a><br />
diff --git a/doc/APIchunk26.html b/doc/APIchunk26.html
index 814dec7..8a0befa 100644
--- a/doc/APIchunk26.html
+++ b/doc/APIchunk26.html
@@ -47,7 +47,6 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlGetDocCompressMode">xmlGetDocCompressMode</a><br />
<a href="html/libxml-tree.html#xmlSetCompressMode">xmlSetCompressMode</a><br />
<a href="html/libxml-tree.html#xmlSetDocCompressMode">xmlSetDocCompressMode</a><br />
-</dd><dt>undefined</dt><dd><a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
</dd><dt>under</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
<a href="html/libxml-tree.html#xmlSetTreeDoc">xmlSetTreeDoc</a><br />
@@ -56,9 +55,11 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-valid.html#xmlValidateElement">xmlValidateElement</a><br />
</dd><dt>underlying</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderClose">xmlTextReaderClose</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentNode">xmlTextReaderCurrentNode</a><br />
+</dd><dt>understand</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
</dd><dt>unescape</dt><dd><a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
</dd><dt>unescaped</dt><dd><a href="html/libxml-xmlIO.html#xmlFileOpen">xmlFileOpen</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>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 />
@@ -70,6 +71,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
</dd><dt>unique</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
<a href="html/libxml-schemasInternals.html#_xmlSchema">_xmlSchema</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-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
</dd><dt>uniquely</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
@@ -82,10 +85,14 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_UNKNOWN">XML_SCHEMAS_FACET_UNKNOWN</a><br />
<a href="html/libxml-HTMLparser.html#htmlCtxtUseOptions">htmlCtxtUseOptions</a><br />
<a href="html/libxml-parser.html#xmlCtxtUseOptions">xmlCtxtUseOptions</a><br />
+<a href="html/libxml-parser.html#xmlHasFeature">xmlHasFeature</a><br />
<a href="html/libxml-xmlunicode.html#xmlUCSIsBlock">xmlUCSIsBlock</a><br />
<a href="html/libxml-xmlunicode.html#xmlUCSIsCat">xmlUCSIsCat</a><br />
</dd><dt>unless</dt><dd><a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
<a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
<a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
<a href="html/libxml-tree.html#xmlGetNsProp">xmlGetNsProp</a><br />
<a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
@@ -169,7 +176,8 @@ 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-valid.html#xmlIsRef">xmlIsRef</a><br />
+</dd><dt>upper</dt><dd><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 />
<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
@@ -185,7 +193,10 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
</dd><dt>users</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchema">_xmlSchema</a><br />
</dd><dt>uses</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
-</dd><dt>usually</dt><dd><a href="">c</a><br />
+</dd><dt>usual</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
+</dd><dt>usually</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_MODULE_EXTENSION">LIBXML_MODULE_EXTENSION</a><br />
+<a href="">c</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
<a href="html/libxml-encoding.html#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetPredefinedType">xmlSchemaGetPredefinedType</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderGetParserProp">xmlTextReaderGetParserProp</a><br />
@@ -237,7 +248,8 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>varags</dt><dd><a href="html/libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a><br />
</dd><dt>vararg</dt><dd><a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
<a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
-</dd><dt>variables</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+</dd><dt>variables</dt><dd><a href="html/libxml-xpath.html#XML_XPATH_NOVAR">XML_XPATH_NOVAR</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
<a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredNsCleanup">xmlXPathRegisteredNsCleanup</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathRegisteredVariablesCleanup">xmlXPathRegisteredVariablesCleanup</a><br />
diff --git a/doc/APIchunk27.html b/doc/APIchunk27.html
index 646d079..2db1f05 100644
--- a/doc/APIchunk27.html
+++ b/doc/APIchunk27.html
@@ -132,6 +132,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlCopyPropList">xmlCopyPropList</a><br />
<a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
<a href="html/libxml-tree.html#xmlDOMWrapReconcileNamespaces">xmlDOMWrapReconcileNamespaces</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-xmlIO.html#xmlFileRead">xmlFileRead</a><br />
<a href="html/libxml-xmlIO.html#xmlIOFTPRead">xmlIOFTPRead</a><br />
<a href="html/libxml-xmlIO.html#xmlIOHTTPRead">xmlIOHTTPRead</a><br />
@@ -228,9 +230,11 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
<a href="html/libxml-SAX2.html#xmlSAX2EntityDecl">xmlSAX2EntityDecl</a><br />
<a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+<a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
<a href="html/libxml-valid.html#xmlValidateOneNamespace">xmlValidateOneNamespace</a><br />
</dd><dt>won</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
<a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
<a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
diff --git a/doc/APIchunk28.html b/doc/APIchunk28.html
index e2520bc..c3146cf 100644
--- a/doc/APIchunk28.html
+++ b/doc/APIchunk28.html
@@ -172,6 +172,12 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-SAX2.html#xmlSAX2GetParameterEntity">xmlSAX2GetParameterEntity</a><br />
</dd><dt>xmlEnumerationPtr</dt><dd><a href="html/libxml-valid.html#xmlCopyEnumeration">xmlCopyEnumeration</a><br />
<a href="html/libxml-valid.html#xmlCreateEnumeration">xmlCreateEnumeration</a><br />
+</dd><dt>xmlExpFree</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
+</dd><dt>xmlExpRef</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
</dd><dt>xmlExternalEntityLoader</dt><dd><a href="html/libxml-parser.html#xmlGetExternalEntityLoader">xmlGetExternalEntityLoader</a><br />
</dd><dt>xmlFileOpen_real</dt><dd><a href="html/libxml-xmlIO.html#xmlFileOpen">xmlFileOpen</a><br />
</dd><dt>xmlFree</dt><dd><a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
@@ -329,6 +335,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>xmlParserProperties</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetParserProp">xmlTextReaderGetParserProp</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
</dd><dt>xmlPattern</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_PATTERN_ENABLED">LIBXML_PATTERN_ENABLED</a><br />
+</dd><dt>xmlPatternFlags</dt><dd><a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
</dd><dt>xmlPatternGetStreamCtxt</dt><dd><a href="html/libxml-pattern.html#xmlPatternStreamable">xmlPatternStreamable</a><br />
</dd><dt>xmlPatterncompile</dt><dd><a href="html/libxml-pattern.html#xmlStreamPush">xmlStreamPush</a><br />
<a href="html/libxml-pattern.html#xmlStreamPushAttr">xmlStreamPushAttr</a><br />
@@ -386,6 +393,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>xmlSchemaSAXPlug</dt><dd><a href="html/libxml-xmlschemas.html#xmlSchemaSAXUnplug">xmlSchemaSAXUnplug</a><br />
</dd><dt>xmlSchemaValType</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaGetValType">xmlSchemaGetValType</a><br />
</dd><dt>xmlSchemaValidOption</dt><dd><a href="html/libxml-xmlschemas.html#xmlSchemaSetValidOptions">xmlSchemaSetValidOptions</a><br />
+</dd><dt>xmlSchematronValidOptions</dt><dd><a href="html/libxml-schematron.html#xmlSchematronNewValidCtxt">xmlSchematronNewValidCtxt</a><br />
</dd><dt>xmlSetExternalEntityLoader</dt><dd><a href="html/libxml-SAX.html#resolveEntity">resolveEntity</a><br />
<a href="html/libxml-parser.html#resolveEntitySAXFunc">resolveEntitySAXFunc</a><br />
<a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
@@ -421,6 +429,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>xmlURIEscapeStr</dt><dd><a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
</dd><dt>xmlURIFromPath</dt><dd><a href="html/libxml-xmlIO.html#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a><br />
</dd><dt>xmlURIPtr</dt><dd><a href="html/libxml-uri.html#xmlParseURI">xmlParseURI</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
</dd><dt>xmlUnlinkNode</dt><dd><a href="html/libxml-tree.html#xmlFreeNode">xmlFreeNode</a><br />
</dd><dt>xmlUnlockLibrary</dt><dd><a href="html/libxml-threads.html#xmlUnlockLibrary">xmlUnlockLibrary</a><br />
</dd><dt>xmlValidCtxtPtr</dt><dd><a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
diff --git a/doc/APIchunk29.html b/doc/APIchunk29.html
index 969581e..e9edd2c 100644
--- a/doc/APIchunk29.html
+++ b/doc/APIchunk29.html
@@ -50,7 +50,6 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlregexp.html#xmlRegexpIsDeterminist">xmlRegexpIsDeterminist</a><br />
<a href="html/libxml-xmlwriter.html#xmlTextWriterStartDocument">xmlTextWriterStartDocument</a><br />
</dd><dt>yet</dt><dd><a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
-<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
<a href="html/libxml-xmlsave.html#xmlSaveDoc">xmlSaveDoc</a><br />
<a href="html/libxml-xmlsave.html#xmlSaveTree">xmlSaveTree</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetCanonValue">xmlSchemaGetCanonValue</a><br />
@@ -72,6 +71,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
<a href="html/libxml-parser.html#xmlCtxtReadDoc">xmlCtxtReadDoc</a><br />
<a href="html/libxml-tree.html#xmlDocDumpMemory">xmlDocDumpMemory</a><br />
+<a href="html/libxml-parser.html#xmlHasFeature">xmlHasFeature</a><br />
<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteEscape">xmlOutputBufferWriteEscape</a><br />
<a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
<a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
diff --git a/doc/APIchunk3.html b/doc/APIchunk3.html
index 2b95558..32c47e7 100644
--- a/doc/APIchunk3.html
+++ b/doc/APIchunk3.html
@@ -58,7 +58,9 @@ A:link, A:visited, A:active { text-decoration: underline }
</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>Find</dt><dd><a href="html/libxml-valid.html#xmlGetRefs">xmlGetRefs</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 />
<a href="html/libxml-hash.html#xmlHashLookup">xmlHashLookup</a><br />
<a href="html/libxml-hash.html#xmlHashLookup2">xmlHashLookup2</a><br />
<a href="html/libxml-hash.html#xmlHashLookup3">xmlHashLookup3</a><br />
@@ -70,6 +72,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
<a href="html/libxml-parser.html#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a><br />
<a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
+</dd><dt>Finds</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpIsNillable">xmlExpIsNillable</a><br />
</dd><dt>First</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
</dd><dt>Fixed</dt><dd><a href="html/libxml-parserInternals.html#xmlParseDefaultDecl">xmlParseDefaultDecl</a><br />
<a href="html/libxml-valid.html#xmlValidateOneAttribute">xmlValidateOneAttribute</a><br />
@@ -255,7 +258,9 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
</dd><dt>Included</dt><dd><a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
+</dd><dt>Increase</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpRef">xmlExpRef</a><br />
</dd><dt>Increment</dt><dd><a href="html/libxml-dict.html#xmlDictReference">xmlDictReference</a><br />
+</dd><dt>Indicate</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpMaxToken">xmlExpMaxToken</a><br />
</dd><dt>Indicates</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaWildcard">_xmlSchemaWildcard</a><br />
</dd><dt>Infinity</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
</dd><dt>Initial</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataGetInitState">xmlAutomataGetInitState</a><br />
diff --git a/doc/APIchunk4.html b/doc/APIchunk4.html
index 52d4750..b6dce45 100644
--- a/doc/APIchunk4.html
+++ b/doc/APIchunk4.html
@@ -142,6 +142,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
</dd><dt>Method</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
</dd><dt>Mime-Type</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPMimeType">xmlNanoHTTPMimeType</a><br />
+</dd><dt>Minimal</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
</dd><dt>Misc</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchema">_xmlSchema</a><br />
<a href="html/libxml-parser.html#xmlParseDocument">xmlParseDocument</a><br />
<a href="html/libxml-parserInternals.html#xmlParseMisc">xmlParseMisc</a><br />
@@ -289,6 +290,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>Note</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
<a href="html/libxml-HTMLparser.html#htmlElementAllowedHere">htmlElementAllowedHere</a><br />
<a href="html/libxml-valid.html#xmlAddAttributeDecl">xmlAddAttributeDecl</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
<a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
<a href="html/libxml-tree.html#xmlDOMWrapReconcileNamespaces">xmlDOMWrapReconcileNamespaces</a><br />
@@ -296,6 +298,9 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</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-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
<a href="html/libxml-tree.html#xmlHasNsProp">xmlHasNsProp</a><br />
<a href="html/libxml-nanohttp.html#xmlNanoHTTPContentLength">xmlNanoHTTPContentLength</a><br />
<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
diff --git a/doc/APIchunk5.html b/doc/APIchunk5.html
index 05ab344..31e1e79 100644
--- a/doc/APIchunk5.html
+++ b/doc/APIchunk5.html
@@ -126,6 +126,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parser.html#xmlParseInNodeContext">xmlParseInNodeContext</a><br />
<a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
<a href="html/libxml-uri.html#xmlParseURI">xmlParseURI</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
<a href="html/libxml-uri.html#xmlParseURIReference">xmlParseURIReference</a><br />
<a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
diff --git a/doc/APIchunk6.html b/doc/APIchunk6.html
index b2179c0..1357cda 100644
--- a/doc/APIchunk6.html
+++ b/doc/APIchunk6.html
@@ -165,6 +165,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGSetParserErrors">xmlRelaxNGSetParserErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidErrors">xmlRelaxNGSetValidErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidStructuredErrors">xmlRelaxNGSetValidStructuredErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGValidateDoc">xmlRelaxNGValidateDoc</a><br />
</dd><dt>RelaxNG</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGCleanupTypes">xmlRelaxNGCleanupTypes</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGDump">xmlRelaxNGDump</a><br />
@@ -224,6 +225,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-entities.html#xmlGetDocEntity">xmlGetDocEntity</a><br />
<a href="html/libxml-entities.html#xmlGetDtdEntity">xmlGetDtdEntity</a><br />
<a href="html/libxml-entities.html#xmlGetParameterEntity">xmlGetParameterEntity</a><br />
+<a href="html/libxml-parser.html#xmlHasFeature">xmlHasFeature</a><br />
<a href="html/libxml-list.html#xmlLinkGetData">xmlLinkGetData</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathCheckError">xmlXPathCheckError</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathGetContextNode">xmlXPathGetContextNode</a><br />
diff --git a/doc/APIchunk7.html b/doc/APIchunk7.html
index 825348d..5c9847c 100644
--- a/doc/APIchunk7.html
+++ b/doc/APIchunk7.html
@@ -119,6 +119,13 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlschemas.html#xmlSchemaNewMemParserCtxt">xmlSchemaNewMemParserCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaNewParserCtxt">xmlSchemaNewParserCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaNewValidCtxt">xmlSchemaNewValidCtxt</a><br />
+</dd><dt>Schematron</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_SCHEMATRON_ENABLED">LIBXML_SCHEMATRON_ENABLED</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronFree">xmlSchematronFree</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronParse">xmlSchematronParse</a><br />
+</dd><dt>Schematrons</dt><dd><a href="html/libxml-schematron.html#xmlSchematronNewDocParserCtxt">xmlSchematronNewDocParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewMemParserCtxt">xmlSchematronNewMemParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewParserCtxt">xmlSchematronNewParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewValidCtxt">xmlSchematronNewValidCtxt</a><br />
</dd><dt>Script</dt><dd><a href="html/libxml-HTMLparser.html#htmlIsScriptAttribute">htmlIsScriptAttribute</a><br />
</dd><dt>Search</dt><dd><a href="html/libxml-encoding.html#xmlFindCharEncodingHandler">xmlFindCharEncodingHandler</a><br />
<a href="html/libxml-encoding.html#xmlGetCharEncodingHandler">xmlGetCharEncodingHandler</a><br />
@@ -158,36 +165,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>Semi</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxParserSetFlag">xmlRelaxParserSetFlag</a><br />
</dd><dt>Send</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPQuit">xmlNanoFTPQuit</a><br />
</dd><dt>Serialize</dt><dd><a href="html/libxml-tree.html#xmlAttrSerializeTxtContent">xmlAttrSerializeTxtContent</a><br />
-</dd><dt>Set</dt><dd><a href="html/libxml-HTMLparser.html#htmlHandleOmittedElem">htmlHandleOmittedElem</a><br />
-<a href="html/libxml-xmlerror.html#initGenericErrorDefaultFunc">initGenericErrorDefaultFunc</a><br />
-<a href="html/libxml-SAX.html#setNamespace">setNamespace</a><br />
-<a href="html/libxml-xlink.html#xlinkSetDefaultDetect">xlinkSetDefaultDetect</a><br />
-<a href="html/libxml-xlink.html#xlinkSetDefaultHandler">xlinkSetDefaultHandler</a><br />
-<a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
-<a href="html/libxml-entities.html#xmlInitializePredefinedEntities">xmlInitializePredefinedEntities</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-tree.html#xmlNodeSetBase">xmlNodeSetBase</a><br />
-<a href="html/libxml-tree.html#xmlNodeSetLang">xmlNodeSetLang</a><br />
-<a href="html/libxml-tree.html#xmlNodeSetName">xmlNodeSetName</a><br />
-<a href="html/libxml-tree.html#xmlNodeSetSpacePreserve">xmlNodeSetSpacePreserve</a><br />
-<a href="html/libxml-parser.html#xmlPedanticParserDefault">xmlPedanticParserDefault</a><br />
-<a href="html/libxml-relaxng.html#xmlRelaxNGSetParserErrors">xmlRelaxNGSetParserErrors</a><br />
-<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidErrors">xmlRelaxNGSetValidErrors</a><br />
-<a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
-<a href="html/libxml-xmlsave.html#xmlSaveSetAttrEscape">xmlSaveSetAttrEscape</a><br />
-<a href="html/libxml-xmlsave.html#xmlSaveSetEscape">xmlSaveSetEscape</a><br />
-<a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
-<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a><br />
-<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
-<a href="html/libxml-parserInternals.html#xmlSetEntityReferenceFunc">xmlSetEntityReferenceFunc</a><br />
-<a href="html/libxml-tree.html#xmlSetNsProp">xmlSetNsProp</a><br />
-<a href="html/libxml-tree.html#xmlSetProp">xmlSetProp</a><br />
-<a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</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-xinclude.html#xmlXIncludeSetFlags">xmlXIncludeSetFlags</a><br />
-<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpDump">xmlExpDump</a><br />
</dd><dt>Sets</dt><dd><a href="html/libxml-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
<a href="html/libxml-tree.html#xmlBufferSetAllocationScheme">xmlBufferSetAllocationScheme</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidOptions">xmlSchemaSetValidOptions</a><br />
@@ -215,6 +193,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</dd><dt>Shell</dt><dd><a href="html/libxml-debugXML.html#xmlShellReadlineFunc">xmlShellReadlineFunc</a><br />
</dd><dt>Shema</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronParse">xmlSchematronParse</a><br />
</dd><dt>Should</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
<a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
diff --git a/doc/APIchunk8.html b/doc/APIchunk8.html
index 22ea3f8..0407e65 100644
--- a/doc/APIchunk8.html
+++ b/doc/APIchunk8.html
@@ -56,7 +56,6 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
<a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
<a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
-<a href="html/libxml-parser.html#xmlLoadExternalEntity">xmlLoadExternalEntity</a><br />
<a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
<a href="html/libxml-parserInternals.html#xmlNamespaceParseNCName">xmlNamespaceParseNCName</a><br />
<a href="html/libxml-parserInternals.html#xmlNamespaceParseNSDef">xmlNamespaceParseNSDef</a><br />
@@ -112,6 +111,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
</dd><dt>Then</dt><dd><a href="html/libxml-valid.html#xmlValidateOneElement">xmlValidateOneElement</a><br />
+</dd><dt>There</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
</dd><dt>Those</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
</dd><dt>Thus:</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
</dd><dt>Tibetan</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsTibetan">xmlUCSIsTibetan</a><br />
@@ -183,6 +183,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parser.html#ignorableWhitespaceSAXFunc">ignorableWhitespaceSAXFunc</a><br />
<a href="html/libxml-SAX2.html#xmlSAX2IgnorableWhitespace">xmlSAX2IgnorableWhitespace</a><br />
</dd><dt>URI-reference</dt><dd><a href="html/libxml-uri.html#xmlParseURI">xmlParseURI</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
<a href="html/libxml-uri.html#xmlParseURIReference">xmlParseURIReference</a><br />
</dd><dt>URN</dt><dd><a href="html/libxml-SAX.html#globalNamespace">globalNamespace</a><br />
<a href="html/libxml-SAX.html#namespaceDecl">namespaceDecl</a><br />
diff --git a/doc/APIchunk9.html b/doc/APIchunk9.html
index 98df8eb..91895db 100644
--- a/doc/APIchunk9.html
+++ b/doc/APIchunk9.html
@@ -44,6 +44,7 @@ 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#xmlSchemaValidateOneElement">xmlSchemaValidateOneElement</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+<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#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
<a href="html/libxml-valid.html#xmlValidateNameValue">xmlValidateNameValue</a><br />
@@ -206,7 +207,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
<a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
<a href="html/libxml-xpointer.html#xmlXPtrRangeToFunction">xmlXPtrRangeToFunction</a><br />
-</dd><dt>XSD</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderSchemaValidate">xmlTextReaderSchemaValidate</a><br />
+</dd><dt>XSD</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderSchemaValidate">xmlTextReaderSchemaValidate</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderSetSchema">xmlTextReaderSetSchema</a><br />
</dd><dt>XSLT</dt><dd><a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
<a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
diff --git a/doc/APIconstructors.html b/doc/APIconstructors.html
index 7625556..9598e49 100644
--- a/doc/APIconstructors.html
+++ b/doc/APIconstructors.html
@@ -148,6 +148,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCountedTrans">xmlAutomataNewCountedTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewEpsilon">xmlAutomataNewEpsilon</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewState">xmlAutomataNewState</a><br />
@@ -324,6 +325,14 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
</p><h2>Type xmlErrorPtr:</h2><p><a href="html/libxml-xmlerror.html#xmlCtxtGetLastError">xmlCtxtGetLastError</a><br />
<a href="html/libxml-xmlerror.html#xmlGetLastError">xmlGetLastError</a><br />
+</p><h2>Type xmlExpCtxtPtr:</h2><p><a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
+</p><h2>Type xmlExpNodePtr:</h2><p><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewAtom">xmlExpNewAtom</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
</p><h2>Type xmlExternalEntityLoader:</h2><p><a href="html/libxml-parser.html#xmlGetExternalEntityLoader">xmlGetExternalEntityLoader</a><br />
</p><h2>Type xmlGlobalStatePtr:</h2><p><a href="html/libxml-threads.html#xmlGetGlobalState">xmlGetGlobalState</a><br />
</p><h2>Type xmlHashTablePtr:</h2><p><a href="html/libxml-hash.html#xmlHashCopy">xmlHashCopy</a><br />
@@ -491,6 +500,11 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlschemastypes.html#xmlSchemaValueGetNext">xmlSchemaValueGetNext</a><br />
</p><h2>Type xmlSchemaValType:</h2><p><a href="html/libxml-xmlschemastypes.html#xmlSchemaGetValType">xmlSchemaGetValType</a><br />
</p><h2>Type xmlSchemaValidCtxtPtr:</h2><p><a href="html/libxml-xmlschemas.html#xmlSchemaNewValidCtxt">xmlSchemaNewValidCtxt</a><br />
+</p><h2>Type xmlSchematronParserCtxtPtr:</h2><p><a href="html/libxml-schematron.html#xmlSchematronNewDocParserCtxt">xmlSchematronNewDocParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewMemParserCtxt">xmlSchematronNewMemParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewParserCtxt">xmlSchematronNewParserCtxt</a><br />
+</p><h2>Type xmlSchematronPtr:</h2><p><a href="html/libxml-schematron.html#xmlSchematronParse">xmlSchematronParse</a><br />
+</p><h2>Type xmlSchematronValidCtxtPtr:</h2><p><a href="html/libxml-schematron.html#xmlSchematronNewValidCtxt">xmlSchematronNewValidCtxt</a><br />
</p><h2>Type xmlStreamCtxtPtr:</h2><p><a href="html/libxml-pattern.html#xmlPatternGetStreamCtxt">xmlPatternGetStreamCtxt</a><br />
</p><h2>Type xmlTextReaderPtr:</h2><p><a href="html/libxml-xmlreader.html#xmlNewTextReader">xmlNewTextReader</a><br />
<a href="html/libxml-xmlreader.html#xmlNewTextReaderFilename">xmlNewTextReaderFilename</a><br />
@@ -508,6 +522,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a><br />
</p><h2>Type xmlURIPtr:</h2><p><a href="html/libxml-uri.html#xmlCreateURI">xmlCreateURI</a><br />
<a href="html/libxml-uri.html#xmlParseURI">xmlParseURI</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
</p><h2>Type xmlValidCtxtPtr:</h2><p><a href="html/libxml-valid.html#xmlNewValidCtxt">xmlNewValidCtxt</a><br />
</p><h2>Type xmlXIncludeCtxtPtr:</h2><p><a href="html/libxml-xinclude.html#xmlXIncludeNewContext">xmlXIncludeNewContext</a><br />
</p><h2>Type xmlXPathCompExprPtr:</h2><p><a href="html/libxml-xpath.html#xmlXPathCompile">xmlXPathCompile</a><br />
diff --git a/doc/APIfiles.html b/doc/APIfiles.html
index 94d55f0..b275cf7 100644
--- a/doc/APIfiles.html
+++ b/doc/APIfiles.html
@@ -27,11 +27,13 @@ A:link, A:visited, A:active { text-decoration: underline }
</p><h2><a name="HTMLparser" id="HTMLparser">Module HTMLparser</a>:</h2><p><a href="html/libxml-HTMLparser.html#HTML_DEPRECATED">HTML_DEPRECATED</a><br />
<a href="html/libxml-HTMLparser.html#HTML_INVALID">HTML_INVALID</a><br />
<a href="html/libxml-HTMLparser.html#HTML_NA">HTML_NA</a><br />
+<a href="html/libxml-HTMLparser.html#HTML_PARSE_COMPACT">HTML_PARSE_COMPACT</a><br />
<a href="html/libxml-HTMLparser.html#HTML_PARSE_NOBLANKS">HTML_PARSE_NOBLANKS</a><br />
<a href="html/libxml-HTMLparser.html#HTML_PARSE_NOERROR">HTML_PARSE_NOERROR</a><br />
<a href="html/libxml-HTMLparser.html#HTML_PARSE_NONET">HTML_PARSE_NONET</a><br />
<a href="html/libxml-HTMLparser.html#HTML_PARSE_NOWARNING">HTML_PARSE_NOWARNING</a><br />
<a href="html/libxml-HTMLparser.html#HTML_PARSE_PEDANTIC">HTML_PARSE_PEDANTIC</a><br />
+<a href="html/libxml-HTMLparser.html#HTML_PARSE_RECOVER">HTML_PARSE_RECOVER</a><br />
<a href="html/libxml-HTMLparser.html#HTML_REQUIRED">HTML_REQUIRED</a><br />
<a href="html/libxml-HTMLparser.html#HTML_VALID">HTML_VALID</a><br />
<a href="html/libxml-HTMLparser.html#UTF8ToHtml">UTF8ToHtml</a><br />
@@ -574,6 +576,37 @@ A:link, A:visited, A:active { text-decoration: underline }
</p><h2><a name="parser" id="parser">Module parser</a>:</h2><p><a href="html/libxml-parser.html#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a><br />
<a href="html/libxml-parser.html#XML_DEFAULT_VERSION">XML_DEFAULT_VERSION</a><br />
<a href="html/libxml-parser.html#XML_DETECT_IDS">XML_DETECT_IDS</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_AUTOMATA">XML_FEATURE_AUTOMATA</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_C14N">XML_FEATURE_C14N</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_CATALOG">XML_FEATURE_CATALOG</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_DEBUG">XML_FEATURE_DEBUG</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_DEBUG_MEM">XML_FEATURE_DEBUG_MEM</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_DEBUG_RUN">XML_FEATURE_DEBUG_RUN</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_EXPR">XML_FEATURE_EXPR</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_FTP">XML_FEATURE_FTP</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_HTML">XML_FEATURE_HTML</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_HTTP">XML_FEATURE_HTTP</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_ICONV">XML_FEATURE_ICONV</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_ISO8859X">XML_FEATURE_ISO8859X</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_LEGACY">XML_FEATURE_LEGACY</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_MODULES">XML_FEATURE_MODULES</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_NONE">XML_FEATURE_NONE</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_OUTPUT">XML_FEATURE_OUTPUT</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_PATTERN">XML_FEATURE_PATTERN</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_PUSH">XML_FEATURE_PUSH</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_READER">XML_FEATURE_READER</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_REGEXP">XML_FEATURE_REGEXP</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_SAX1">XML_FEATURE_SAX1</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_SCHEMAS">XML_FEATURE_SCHEMAS</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_SCHEMATRON">XML_FEATURE_SCHEMATRON</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_THREAD">XML_FEATURE_THREAD</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_TREE">XML_FEATURE_TREE</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_UNICODE">XML_FEATURE_UNICODE</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_VALID">XML_FEATURE_VALID</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_WRITER">XML_FEATURE_WRITER</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_XINCLUDE">XML_FEATURE_XINCLUDE</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_XPATH">XML_FEATURE_XPATH</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_XPTR">XML_FEATURE_XPTR</a><br />
<a href="html/libxml-parser.html#XML_PARSER_ATTRIBUTE_VALUE">XML_PARSER_ATTRIBUTE_VALUE</a><br />
<a href="html/libxml-parser.html#XML_PARSER_CDATA_SECTION">XML_PARSER_CDATA_SECTION</a><br />
<a href="html/libxml-parser.html#XML_PARSER_COMMENT">XML_PARSER_COMMENT</a><br />
@@ -592,6 +625,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_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 />
<a href="html/libxml-parser.html#XML_PARSE_DTDLOAD">XML_PARSE_DTDLOAD</a><br />
@@ -669,10 +703,12 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parser.html#xmlCtxtResetPush">xmlCtxtResetPush</a><br />
<a href="html/libxml-parser.html#xmlCtxtUseOptions">xmlCtxtUseOptions</a><br />
<a href="html/libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</a><br />
+<a href="html/libxml-parser.html#xmlFeature">xmlFeature</a><br />
<a href="html/libxml-parser.html#xmlFreeParserCtxt">xmlFreeParserCtxt</a><br />
<a href="html/libxml-parser.html#xmlGetExternalEntityLoader">xmlGetExternalEntityLoader</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 />
<a href="html/libxml-parser.html#xmlIOParseDTD">xmlIOParseDTD</a><br />
<a href="html/libxml-parser.html#xmlInitNodeInfoSeq">xmlInitNodeInfoSeq</a><br />
<a href="html/libxml-parser.html#xmlInitParser">xmlInitParser</a><br />
@@ -869,6 +905,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-pattern.html#xmlPatternGetStreamCtxt">xmlPatternGetStreamCtxt</a><br />
<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
<a href="html/libxml-pattern.html#xmlPatternMaxDepth">xmlPatternMaxDepth</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMinDepth">xmlPatternMinDepth</a><br />
<a href="html/libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a><br />
<a href="html/libxml-pattern.html#xmlPatternStreamable">xmlPatternStreamable</a><br />
<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
@@ -941,6 +978,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGSetParserErrors">xmlRelaxNGSetParserErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidErrors">xmlRelaxNGSetValidErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidStructuredErrors">xmlRelaxNGSetValidStructuredErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGValidCtxt">xmlRelaxNGValidCtxt</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGValidErr">xmlRelaxNGValidErr</a><br />
@@ -1167,6 +1205,30 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-schemasInternals.html#xmlSchemaWildcardNs">xmlSchemaWildcardNs</a><br />
<a href="html/libxml-schemasInternals.html#xmlSchemaWildcardNsPtr">xmlSchemaWildcardNsPtr</a><br />
<a href="html/libxml-schemasInternals.html#xmlSchemaWildcardPtr">xmlSchemaWildcardPtr</a><br />
+</p><h2><a name="schematron" id="schematron">Module schematron</a>:</h2><p><a href="html/libxml-schematron.html#XML_SCHEMATRON_OUT_BUFFER">XML_SCHEMATRON_OUT_BUFFER</a><br />
+<a href="html/libxml-schematron.html#XML_SCHEMATRON_OUT_FILE">XML_SCHEMATRON_OUT_FILE</a><br />
+<a href="html/libxml-schematron.html#XML_SCHEMATRON_OUT_IO">XML_SCHEMATRON_OUT_IO</a><br />
+<a href="html/libxml-schematron.html#XML_SCHEMATRON_OUT_QUIET">XML_SCHEMATRON_OUT_QUIET</a><br />
+<a href="html/libxml-schematron.html#XML_SCHEMATRON_OUT_TEXT">XML_SCHEMATRON_OUT_TEXT</a><br />
+<a href="html/libxml-schematron.html#XML_SCHEMATRON_OUT_XML">XML_SCHEMATRON_OUT_XML</a><br />
+<a href="html/libxml-schematron.html#xmlSchematron">xmlSchematron</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronFree">xmlSchematronFree</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronFreeParserCtxt">xmlSchematronFreeParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronFreeValidCtxt">xmlSchematronFreeValidCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewDocParserCtxt">xmlSchematronNewDocParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewMemParserCtxt">xmlSchematronNewMemParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewParserCtxt">xmlSchematronNewParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewValidCtxt">xmlSchematronNewValidCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronParse">xmlSchematronParse</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronParserCtxt">xmlSchematronParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronParserCtxtPtr">xmlSchematronParserCtxtPtr</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronPtr">xmlSchematronPtr</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidCtxt">xmlSchematronValidCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidCtxtPtr">xmlSchematronValidCtxtPtr</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidOptions">xmlSchematronValidOptions</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidateDoc">xmlSchematronValidateDoc</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidityErrorFunc">xmlSchematronValidityErrorFunc</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidityWarningFunc">xmlSchematronValidityWarningFunc</a><br />
</p><h2><a name="threads" id="threads">Module threads</a>:</h2><p><a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
<a href="html/libxml-threads.html#xmlFreeMutex">xmlFreeMutex</a><br />
<a href="html/libxml-threads.html#xmlFreeRMutex">xmlFreeRMutex</a><br />
@@ -1468,6 +1530,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-uri.html#xmlFreeURI">xmlFreeURI</a><br />
<a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
<a href="html/libxml-uri.html#xmlParseURI">xmlParseURI</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
<a href="html/libxml-uri.html#xmlParseURIReference">xmlParseURIReference</a><br />
<a href="html/libxml-uri.html#xmlPrintURI">xmlPrintURI</a><br />
<a href="html/libxml-uri.html#xmlSaveUri">xmlSaveUri</a><br />
@@ -1682,6 +1745,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounter">xmlAutomataNewCounter</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewEpsilon">xmlAutomataNewEpsilon</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewState">xmlAutomataNewState</a><br />
@@ -1896,6 +1960,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlerror.html#XML_FROM_FTP">XML_FROM_FTP</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_HTML">XML_FROM_HTML</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_HTTP">XML_FROM_HTTP</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_I18N">XML_FROM_I18N</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_IO">XML_FROM_IO</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_MEMORY">XML_FROM_MEMORY</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_MODULE">XML_FROM_MODULE</a><br />
@@ -1924,6 +1989,11 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlerror.html#XML_HTTP_UNKNOWN_HOST">XML_HTTP_UNKNOWN_HOST</a><br />
<a href="html/libxml-xmlerror.html#XML_HTTP_URL_SYNTAX">XML_HTTP_URL_SYNTAX</a><br />
<a href="html/libxml-xmlerror.html#XML_HTTP_USE_IP">XML_HTTP_USE_IP</a><br />
+<a href="html/libxml-xmlerror.html#XML_I18N_CONV_FAILED">XML_I18N_CONV_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_I18N_EXCESS_HANDLER">XML_I18N_EXCESS_HANDLER</a><br />
+<a href="html/libxml-xmlerror.html#XML_I18N_NO_HANDLER">XML_I18N_NO_HANDLER</a><br />
+<a href="html/libxml-xmlerror.html#XML_I18N_NO_NAME">XML_I18N_NO_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_I18N_NO_OUTPUT">XML_I18N_NO_OUTPUT</a><br />
<a href="html/libxml-xmlerror.html#XML_IO_BUFFER_FULL">XML_IO_BUFFER_FULL</a><br />
<a href="html/libxml-xmlerror.html#XML_IO_EACCES">XML_IO_EACCES</a><br />
<a href="html/libxml-xmlerror.html#XML_IO_EADDRINUSE">XML_IO_EADDRINUSE</a><br />
@@ -2255,6 +2325,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_IMPORT_3_2">XML_SCHEMAP_SRC_IMPORT_3_2</a><br />
<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_INCLUDE">XML_SCHEMAP_SRC_INCLUDE</a><br />
<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE">XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_REDEFINE">XML_SCHEMAP_SRC_REDEFINE</a><br />
<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_RESOLVE">XML_SCHEMAP_SRC_RESOLVE</a><br />
<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE">XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE</a><br />
<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_SIMPLE_TYPE_1">XML_SCHEMAP_SRC_SIMPLE_TYPE_1</a><br />
@@ -2458,6 +2529,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a><br />
</p><h2><a name="xmlexports" id="xmlexports">Module xmlexports</a>:</h2><p><a href="html/libxml-xmlexports.html#LIBXML_DLL_IMPORT">LIBXML_DLL_IMPORT</a><br />
<a href="html/libxml-xmlexports.html#XMLCALL">XMLCALL</a><br />
+<a href="html/libxml-xmlexports.html#XMLCDECL">XMLCDECL</a><br />
<a href="html/libxml-xmlexports.html#XMLPUBFUN">XMLPUBFUN</a><br />
<a href="html/libxml-xmlexports.html#XMLPUBVAR">XMLPUBVAR</a><br />
<a href="html/libxml-xmlexports.html#_REENTRANT">_REENTRANT</a><br />
@@ -2621,7 +2693,39 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlreader.html#xmlTextReaderStandalone">xmlTextReaderStandalone</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderValue">xmlTextReaderValue</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderXmlLang">xmlTextReaderXmlLang</a><br />
-</p><h2><a name="xmlregexp" id="xmlregexp">Module xmlregexp</a>:</h2><p><a href="html/libxml-xmlregexp.html#xmlRegExecCallbacks">xmlRegExecCallbacks</a><br />
+</p><h2><a name="xmlregexp" id="xmlregexp">Module xmlregexp</a>:</h2><p><a href="html/libxml-xmlregexp.html#XML_EXP_ATOM">XML_EXP_ATOM</a><br />
+<a href="html/libxml-xmlregexp.html#XML_EXP_COUNT">XML_EXP_COUNT</a><br />
+<a href="html/libxml-xmlregexp.html#XML_EXP_EMPTY">XML_EXP_EMPTY</a><br />
+<a href="html/libxml-xmlregexp.html#XML_EXP_FORBID">XML_EXP_FORBID</a><br />
+<a href="html/libxml-xmlregexp.html#XML_EXP_OR">XML_EXP_OR</a><br />
+<a href="html/libxml-xmlregexp.html#XML_EXP_SEQ">XML_EXP_SEQ</a><br />
+<a href="html/libxml-xmlregexp.html#emptyExp">emptyExp</a><br />
+<a href="html/libxml-xmlregexp.html#forbiddenExp">forbiddenExp</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxt">xmlExpCtxt</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxtNbCons">xmlExpCtxtNbCons</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxtNbNodes">xmlExpCtxtNbNodes</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpDump">xmlExpDump</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpFree">xmlExpFree</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpFreeCtxt">xmlExpFreeCtxt</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#xmlExpIsNillable">xmlExpIsNillable</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpMaxToken">xmlExpMaxToken</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewAtom">xmlExpNewAtom</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNode">xmlExpNode</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNodeType">xmlExpNodeType</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpRef">xmlExpRef</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpSubsume">xmlExpSubsume</a><br />
+<a href="html/libxml-xmlregexp.html#xmlRegExecCallbacks">xmlRegExecCallbacks</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegExecCtxt">xmlRegExecCtxt</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegExecErrInfo">xmlRegExecErrInfo</a><br />
@@ -2638,6 +2742,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlregexp.html#xmlRegexpPrint">xmlRegexpPrint</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a><br />
</p><h2><a name="xmlsave" id="xmlsave">Module xmlsave</a>:</h2><p><a href="html/libxml-xmlsave.html#XML_SAVE_FORMAT">XML_SAVE_FORMAT</a><br />
+<a href="html/libxml-xmlsave.html#XML_SAVE_NO_DECL">XML_SAVE_NO_DECL</a><br />
<a href="html/libxml-xmlsave.html#xmlSaveClose">xmlSaveClose</a><br />
<a href="html/libxml-xmlsave.html#xmlSaveCtxt">xmlSaveCtxt</a><br />
<a href="html/libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a><br />
@@ -2700,6 +2805,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidOptions">xmlSchemaSetValidOptions</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidStructuredErrors">xmlSchemaSetValidStructuredErrors</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaValidCtxt">xmlSchemaValidCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaValidCtxtGetOptions">xmlSchemaValidCtxtGetOptions</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a><br />
@@ -2957,6 +3063,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlversion.html#LIBXML_DEBUG_RUNTIME">LIBXML_DEBUG_RUNTIME</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_DOCB_ENABLED">LIBXML_DOCB_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_DOTTED_VERSION">LIBXML_DOTTED_VERSION</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_EXPR_ENABLED">LIBXML_EXPR_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_FTP_ENABLED">LIBXML_FTP_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_HTML_ENABLED">LIBXML_HTML_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_HTTP_ENABLED">LIBXML_HTTP_ENABLED</a><br />
@@ -2972,6 +3079,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlversion.html#LIBXML_REGEXP_ENABLED">LIBXML_REGEXP_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_SAX1_ENABLED">LIBXML_SAX1_ENABLED</a><br />
<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_ENABLED">LIBXML_THREAD_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_TREE_ENABLED">LIBXML_TREE_ENABLED</a><br />
@@ -3070,7 +3178,9 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatPI">xmlTextWriterWriteVFormatPI</a><br />
<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatRaw">xmlTextWriterWriteVFormatRaw</a><br />
<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatString">xmlTextWriterWriteVFormatString</a><br />
-</p><h2><a name="xpath" id="xpath">Module xpath</a>:</h2><p><a href="html/libxml-xpath.html#XPATH_BOOLEAN">XPATH_BOOLEAN</a><br />
+</p><h2><a name="xpath" id="xpath">Module xpath</a>:</h2><p><a href="html/libxml-xpath.html#XML_XPATH_CHECKNS">XML_XPATH_CHECKNS</a><br />
+<a href="html/libxml-xpath.html#XML_XPATH_NOVAR">XML_XPATH_NOVAR</a><br />
+<a href="html/libxml-xpath.html#XPATH_BOOLEAN">XPATH_BOOLEAN</a><br />
<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 />
diff --git a/doc/APIfunctions.html b/doc/APIfunctions.html
index ce0d0c5..3d660c4 100644
--- a/doc/APIfunctions.html
+++ b/doc/APIfunctions.html
@@ -19,6 +19,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-relaxng.html#xmlRelaxNGValidityWarningFunc">xmlRelaxNGValidityWarningFunc</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidityErrorFunc">xmlSchematronValidityErrorFunc</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidityWarningFunc">xmlSchematronValidityWarningFunc</a><br />
<a href="html/libxml-xmlstring.html#xmlStrPrintf">xmlStrPrintf</a><br />
<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatAttribute">xmlTextWriterWriteFormatAttribute</a><br />
<a href="html/libxml-xmlwriter.html#xmlTextWriterWriteFormatAttributeNS">xmlTextWriterWriteFormatAttributeNS</a><br />
@@ -180,6 +182,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlAttrSerializeTxtContent">xmlAttrSerializeTxtContent</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans2">xmlAutomataNewCountTrans2</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition">xmlAutomataNewTransition</a><br />
@@ -218,6 +221,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<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-xmlregexp.html#xmlExpNewAtom">xmlExpNewAtom</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
<a href="html/libxml-entities.html#xmlGetDocEntity">xmlGetDocEntity</a><br />
<a href="html/libxml-valid.html#xmlGetDtdAttrDesc">xmlGetDtdAttrDesc</a><br />
<a href="html/libxml-valid.html#xmlGetDtdElementDesc">xmlGetDtdElementDesc</a><br />
@@ -491,6 +496,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parser.html#startElementSAXFunc">startElementSAXFunc</a><br />
<a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
<a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</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-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
<a href="html/libxml-xmlregexp.html#xmlRegExecErrInfo">xmlRegExecErrInfo</a><br />
<a href="html/libxml-SAX2.html#xmlSAX2StartElement">xmlSAX2StartElement</a><br />
@@ -694,6 +701,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans">xmlAutomataNewCountTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCountTrans2">xmlAutomataNewCountTrans2</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition">xmlAutomataNewTransition</a><br />
@@ -792,6 +800,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlregexp.html#xmlRegNewExecCtxt">xmlRegNewExecCtxt</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGSetParserErrors">xmlRelaxNGSetParserErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidErrors">xmlRelaxNGSetValidErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidStructuredErrors">xmlRelaxNGSetValidStructuredErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGValidityErrorFunc">xmlRelaxNGValidityErrorFunc</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGValidityWarningFunc">xmlRelaxNGValidityWarningFunc</a><br />
<a href="html/libxml-SAX2.html#xmlSAX2AttributeDecl">xmlSAX2AttributeDecl</a><br />
@@ -831,9 +840,12 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlsave.html#xmlSaveToIO">xmlSaveToIO</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</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#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidityErrorFunc">xmlSchematronValidityErrorFunc</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidityWarningFunc">xmlSchematronValidityWarningFunc</a><br />
<a href="html/libxml-parser.html#xmlSetFeature">xmlSetFeature</a><br />
<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
<a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
@@ -894,6 +906,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounter">xmlAutomataNewCounter</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewEpsilon">xmlAutomataNewEpsilon</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewState">xmlAutomataNewState</a><br />
@@ -907,6 +920,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCountedTrans">xmlAutomataNewCountedTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewEpsilon">xmlAutomataNewEpsilon</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition">xmlAutomataNewTransition</a><br />
@@ -942,6 +956,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-entities.html#xmlDumpEntityDecl">xmlDumpEntityDecl</a><br />
<a href="html/libxml-valid.html#xmlDumpNotationDecl">xmlDumpNotationDecl</a><br />
<a href="html/libxml-valid.html#xmlDumpNotationTable">xmlDumpNotationTable</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpDump">xmlExpDump</a><br />
<a href="html/libxml-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a><br />
<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
@@ -1055,6 +1070,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<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#xmlDictSize">xmlDictSize</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
<a href="html/libxml-hash.html#xmlHashCreateDict">xmlHashCreateDict</a><br />
</p><h2>Type xmlDocPtr:</h2><p><a href="html/libxml-HTMLtree.html#htmlDocContentDumpFormatOutput">htmlDocContentDumpFormatOutput</a><br />
<a href="html/libxml-HTMLtree.html#htmlDocContentDumpOutput">htmlDocContentDumpOutput</a><br />
@@ -1157,6 +1173,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaNewDocParserCtxt">xmlSchemaNewDocParserCtxt</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaValidateDoc">xmlSchemaValidateDoc</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewDocParserCtxt">xmlSchematronNewDocParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidateDoc">xmlSchematronValidateDoc</a><br />
<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
<a href="html/libxml-tree.html#xmlSearchNsByHref">xmlSearchNsByHref</a><br />
<a href="html/libxml-tree.html#xmlSetDocCompressMode">xmlSetDocCompressMode</a><br />
@@ -1241,7 +1259,35 @@ A:link, A:visited, A:active { text-decoration: underline }
</p><h2>Type xmlErrorPtr:</h2><p><a href="html/libxml-xmlerror.html#xmlCopyError">xmlCopyError</a><br />
<a href="html/libxml-xmlerror.html#xmlResetError">xmlResetError</a><br />
<a href="html/libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a><br />
+</p><h2>Type xmlExpCtxtPtr:</h2><p><a href="html/libxml-xmlregexp.html#xmlExpCtxtNbCons">xmlExpCtxtNbCons</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxtNbNodes">xmlExpCtxtNbNodes</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpFree">xmlExpFree</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpFreeCtxt">xmlExpFreeCtxt</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#xmlExpNewAtom">xmlExpNewAtom</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpSubsume">xmlExpSubsume</a><br />
+</p><h2>Type xmlExpNodePtr:</h2><p><a href="html/libxml-xmlregexp.html#xmlExpDump">xmlExpDump</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpFree">xmlExpFree</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#xmlExpIsNillable">xmlExpIsNillable</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpMaxToken">xmlExpMaxToken</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpRef">xmlExpRef</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpSubsume">xmlExpSubsume</a><br />
</p><h2>Type xmlExternalEntityLoader:</h2><p><a href="html/libxml-parser.html#xmlSetExternalEntityLoader">xmlSetExternalEntityLoader</a><br />
+</p><h2>Type xmlFeature:</h2><p><a href="html/libxml-parser.html#xmlHasFeature">xmlHasFeature</a><br />
</p><h2>Type xmlFreeFunc:</h2><p><a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
<a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
</p><h2>Type xmlFreeFunc *:</h2><p><a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
@@ -1716,13 +1762,13 @@ A:link, A:visited, A:active { text-decoration: underline }
</p><h2>Type xmlParserNodeInfoSeqPtr:</h2><p><a href="html/libxml-parser.html#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a><br />
<a href="html/libxml-parser.html#xmlInitNodeInfoSeq">xmlInitNodeInfoSeq</a><br />
</p><h2>Type xmlParserSeverities:</h2><p><a href="html/libxml-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a><br />
-</p><h2>Type xmlPatternFlags:</h2><p><a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
</p><h2>Type xmlPatternPtr:</h2><p><a href="html/libxml-pattern.html#xmlFreePattern">xmlFreePattern</a><br />
<a href="html/libxml-pattern.html#xmlFreePatternList">xmlFreePatternList</a><br />
<a href="html/libxml-pattern.html#xmlPatternFromRoot">xmlPatternFromRoot</a><br />
<a href="html/libxml-pattern.html#xmlPatternGetStreamCtxt">xmlPatternGetStreamCtxt</a><br />
<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
<a href="html/libxml-pattern.html#xmlPatternMaxDepth">xmlPatternMaxDepth</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMinDepth">xmlPatternMinDepth</a><br />
<a href="html/libxml-pattern.html#xmlPatternStreamable">xmlPatternStreamable</a><br />
</p><h2>Type xmlRMutexPtr:</h2><p><a href="html/libxml-threads.html#xmlFreeRMutex">xmlFreeRMutex</a><br />
<a href="html/libxml-threads.html#xmlRMutexLock">xmlRMutexLock</a><br />
@@ -1759,6 +1805,7 @@ A:link, A:visited, A:active { text-decoration: underline }
</p><h2>Type xmlRelaxNGValidCtxtPtr:</h2><p><a href="html/libxml-relaxng.html#xmlRelaxNGFreeValidCtxt">xmlRelaxNGFreeValidCtxt</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGGetValidErrors">xmlRelaxNGGetValidErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidErrors">xmlRelaxNGSetValidErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidStructuredErrors">xmlRelaxNGSetValidStructuredErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGValidateDoc">xmlRelaxNGValidateDoc</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGValidateFullElement">xmlRelaxNGValidateFullElement</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePopElement">xmlRelaxNGValidatePopElement</a><br />
@@ -1860,6 +1907,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlschemas.html#xmlSchemaSAXPlug">xmlSchemaSAXPlug</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidOptions">xmlSchemaSetValidOptions</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidStructuredErrors">xmlSchemaSetValidStructuredErrors</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaValidCtxtGetOptions">xmlSchemaValidCtxtGetOptions</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaValidateDoc">xmlSchemaValidateDoc</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaValidateFile">xmlSchemaValidateFile</a><br />
@@ -1878,6 +1926,12 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacetWhtsp">xmlSchemaValidateFacetWhtsp</a><br />
<a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateLengthFacetWhtsp">xmlSchemaValidateLengthFacetWhtsp</a><br />
</p><h2>Type xmlSchemaWildcardPtr:</h2><p><a href="html/libxml-schemasInternals.html#xmlSchemaFreeWildcard">xmlSchemaFreeWildcard</a><br />
+</p><h2>Type xmlSchematronParserCtxtPtr:</h2><p><a href="html/libxml-schematron.html#xmlSchematronFreeParserCtxt">xmlSchematronFreeParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronParse">xmlSchematronParse</a><br />
+</p><h2>Type xmlSchematronPtr:</h2><p><a href="html/libxml-schematron.html#xmlSchematronFree">xmlSchematronFree</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewValidCtxt">xmlSchematronNewValidCtxt</a><br />
+</p><h2>Type xmlSchematronValidCtxtPtr:</h2><p><a href="html/libxml-schematron.html#xmlSchematronFreeValidCtxt">xmlSchematronFreeValidCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidateDoc">xmlSchematronValidateDoc</a><br />
</p><h2>Type xmlShellCtxtPtr:</h2><p><a href="html/libxml-debugXML.html#xmlShellBase">xmlShellBase</a><br />
<a href="html/libxml-debugXML.html#xmlShellCat">xmlShellCat</a><br />
<a href="html/libxml-debugXML.html#xmlShellCmd">xmlShellCmd</a><br />
@@ -1898,7 +1952,9 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-pattern.html#xmlStreamPop">xmlStreamPop</a><br />
<a href="html/libxml-pattern.html#xmlStreamPush">xmlStreamPush</a><br />
<a href="html/libxml-pattern.html#xmlStreamPushAttr">xmlStreamPushAttr</a><br />
-</p><h2>Type xmlStructuredErrorFunc:</h2><p><a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+</p><h2>Type xmlStructuredErrorFunc:</h2><p><a href="html/libxml-relaxng.html#xmlRelaxNGSetValidStructuredErrors">xmlRelaxNGSetValidStructuredErrors</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidStructuredErrors">xmlSchemaSetValidStructuredErrors</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a><br />
<a href="html/libxml-globals.html#xmlThrDefSetStructuredErrorFunc">xmlThrDefSetStructuredErrorFunc</a><br />
</p><h2>Type xmlTextReaderErrorFunc:</h2><p><a href="html/libxml-xmlreader.html#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a><br />
diff --git a/doc/APIsymbols.html b/doc/APIsymbols.html
index 756863f..d0fe11d 100644
--- a/doc/APIsymbols.html
+++ b/doc/APIsymbols.html
@@ -25,11 +25,13 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-HTMLtree.html#HTML_ENTITY_REF_NODE">HTML_ENTITY_REF_NODE</a><br />
<a href="html/libxml-HTMLparser.html#HTML_INVALID">HTML_INVALID</a><br />
<a href="html/libxml-HTMLparser.html#HTML_NA">HTML_NA</a><br />
+<a href="html/libxml-HTMLparser.html#HTML_PARSE_COMPACT">HTML_PARSE_COMPACT</a><br />
<a href="html/libxml-HTMLparser.html#HTML_PARSE_NOBLANKS">HTML_PARSE_NOBLANKS</a><br />
<a href="html/libxml-HTMLparser.html#HTML_PARSE_NOERROR">HTML_PARSE_NOERROR</a><br />
<a href="html/libxml-HTMLparser.html#HTML_PARSE_NONET">HTML_PARSE_NONET</a><br />
<a href="html/libxml-HTMLparser.html#HTML_PARSE_NOWARNING">HTML_PARSE_NOWARNING</a><br />
<a href="html/libxml-HTMLparser.html#HTML_PARSE_PEDANTIC">HTML_PARSE_PEDANTIC</a><br />
+<a href="html/libxml-HTMLparser.html#HTML_PARSE_RECOVER">HTML_PARSE_RECOVER</a><br />
<a href="html/libxml-HTMLtree.html#HTML_PI_NODE">HTML_PI_NODE</a><br />
<a href="html/libxml-HTMLtree.html#HTML_PRESERVE_NODE">HTML_PRESERVE_NODE</a><br />
<a href="html/libxml-HTMLparser.html#HTML_REQUIRED">HTML_REQUIRED</a><br />
@@ -63,6 +65,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlexports.html#LIBXML_DLL_IMPORT">LIBXML_DLL_IMPORT</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_DOCB_ENABLED">LIBXML_DOCB_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_DOTTED_VERSION">LIBXML_DOTTED_VERSION</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_EXPR_ENABLED">LIBXML_EXPR_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_FTP_ENABLED">LIBXML_FTP_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_HTML_ENABLED">LIBXML_HTML_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_HTTP_ENABLED">LIBXML_HTTP_ENABLED</a><br />
@@ -78,6 +81,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlversion.html#LIBXML_REGEXP_ENABLED">LIBXML_REGEXP_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_SAX1_ENABLED">LIBXML_SAX1_ENABLED</a><br />
<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_ENABLED">LIBXML_THREAD_ENABLED</a><br />
<a href="html/libxml-xmlversion.html#LIBXML_TREE_ENABLED">LIBXML_TREE_ENABLED</a><br />
@@ -119,6 +123,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xlink.html#XLINK_TYPE_NONE">XLINK_TYPE_NONE</a><br />
<a href="html/libxml-xlink.html#XLINK_TYPE_SIMPLE">XLINK_TYPE_SIMPLE</a><br />
<a href="html/libxml-xmlexports.html#XMLCALL">XMLCALL</a><br />
+<a href="html/libxml-xmlexports.html#XMLCDECL">XMLCDECL</a><br />
<a href="html/libxml-xmlexports.html#XMLPUBFUN">XMLPUBFUN</a><br />
<a href="html/libxml-xmlexports.html#XMLPUBVAR">XMLPUBVAR</a><br />
<a href="html/libxml-tree.html#XML_ATTRIBUTE_CDATA">XML_ATTRIBUTE_CDATA</a><br />
@@ -399,9 +404,46 @@ A:link, A:visited, A:active { text-decoration: underline }
<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-xmlregexp.html#XML_EXP_ATOM">XML_EXP_ATOM</a><br />
+<a href="html/libxml-xmlregexp.html#XML_EXP_COUNT">XML_EXP_COUNT</a><br />
+<a href="html/libxml-xmlregexp.html#XML_EXP_EMPTY">XML_EXP_EMPTY</a><br />
+<a href="html/libxml-xmlregexp.html#XML_EXP_FORBID">XML_EXP_FORBID</a><br />
+<a href="html/libxml-xmlregexp.html#XML_EXP_OR">XML_EXP_OR</a><br />
+<a href="html/libxml-xmlregexp.html#XML_EXP_SEQ">XML_EXP_SEQ</a><br />
<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-parser.html#XML_FEATURE_AUTOMATA">XML_FEATURE_AUTOMATA</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_C14N">XML_FEATURE_C14N</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_CATALOG">XML_FEATURE_CATALOG</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_DEBUG">XML_FEATURE_DEBUG</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_DEBUG_MEM">XML_FEATURE_DEBUG_MEM</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_DEBUG_RUN">XML_FEATURE_DEBUG_RUN</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_EXPR">XML_FEATURE_EXPR</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_FTP">XML_FEATURE_FTP</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_HTML">XML_FEATURE_HTML</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_HTTP">XML_FEATURE_HTTP</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_ICONV">XML_FEATURE_ICONV</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_ISO8859X">XML_FEATURE_ISO8859X</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_LEGACY">XML_FEATURE_LEGACY</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_MODULES">XML_FEATURE_MODULES</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_NONE">XML_FEATURE_NONE</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_OUTPUT">XML_FEATURE_OUTPUT</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_PATTERN">XML_FEATURE_PATTERN</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_PUSH">XML_FEATURE_PUSH</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_READER">XML_FEATURE_READER</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_REGEXP">XML_FEATURE_REGEXP</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_SAX1">XML_FEATURE_SAX1</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_SCHEMAS">XML_FEATURE_SCHEMAS</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_SCHEMATRON">XML_FEATURE_SCHEMATRON</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_THREAD">XML_FEATURE_THREAD</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_TREE">XML_FEATURE_TREE</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_UNICODE">XML_FEATURE_UNICODE</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_VALID">XML_FEATURE_VALID</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_WRITER">XML_FEATURE_WRITER</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_XINCLUDE">XML_FEATURE_XINCLUDE</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_XPATH">XML_FEATURE_XPATH</a><br />
+<a href="html/libxml-parser.html#XML_FEATURE_XPTR">XML_FEATURE_XPTR</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 />
@@ -410,6 +452,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlerror.html#XML_FROM_FTP">XML_FROM_FTP</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_HTML">XML_FROM_HTML</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_HTTP">XML_FROM_HTTP</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_I18N">XML_FROM_I18N</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_IO">XML_FROM_IO</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_MEMORY">XML_FROM_MEMORY</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_MODULE">XML_FROM_MODULE</a><br />
@@ -441,6 +484,11 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlerror.html#XML_HTTP_UNKNOWN_HOST">XML_HTTP_UNKNOWN_HOST</a><br />
<a href="html/libxml-xmlerror.html#XML_HTTP_URL_SYNTAX">XML_HTTP_URL_SYNTAX</a><br />
<a href="html/libxml-xmlerror.html#XML_HTTP_USE_IP">XML_HTTP_USE_IP</a><br />
+<a href="html/libxml-xmlerror.html#XML_I18N_CONV_FAILED">XML_I18N_CONV_FAILED</a><br />
+<a href="html/libxml-xmlerror.html#XML_I18N_EXCESS_HANDLER">XML_I18N_EXCESS_HANDLER</a><br />
+<a href="html/libxml-xmlerror.html#XML_I18N_NO_HANDLER">XML_I18N_NO_HANDLER</a><br />
+<a href="html/libxml-xmlerror.html#XML_I18N_NO_NAME">XML_I18N_NO_NAME</a><br />
+<a href="html/libxml-xmlerror.html#XML_I18N_NO_OUTPUT">XML_I18N_NO_OUTPUT</a><br />
<a href="html/libxml-entities.html#XML_INTERNAL_GENERAL_ENTITY">XML_INTERNAL_GENERAL_ENTITY</a><br />
<a href="html/libxml-entities.html#XML_INTERNAL_PARAMETER_ENTITY">XML_INTERNAL_PARAMETER_ENTITY</a><br />
<a href="html/libxml-entities.html#XML_INTERNAL_PREDEFINED_ENTITY">XML_INTERNAL_PREDEFINED_ENTITY</a><br />
@@ -540,6 +588,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_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 />
<a href="html/libxml-parser.html#XML_PARSE_DTDLOAD">XML_PARSE_DTDLOAD</a><br />
@@ -755,6 +804,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlerror.html#XML_SAVE_CHAR_INVALID">XML_SAVE_CHAR_INVALID</a><br />
<a href="html/libxml-xmlsave.html#XML_SAVE_FORMAT">XML_SAVE_FORMAT</a><br />
<a href="html/libxml-xmlerror.html#XML_SAVE_NOT_UTF8">XML_SAVE_NOT_UTF8</a><br />
+<a href="html/libxml-xmlsave.html#XML_SAVE_NO_DECL">XML_SAVE_NO_DECL</a><br />
<a href="html/libxml-xmlerror.html#XML_SAVE_NO_DOCTYPE">XML_SAVE_NO_DOCTYPE</a><br />
<a href="html/libxml-xmlerror.html#XML_SAVE_UNKNOWN_ENCODING">XML_SAVE_UNKNOWN_ENCODING</a><br />
<a href="html/libxml-parser.html#XML_SAX2_MAGIC">XML_SAX2_MAGIC</a><br />
@@ -897,6 +947,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_IMPORT_3_2">XML_SCHEMAP_SRC_IMPORT_3_2</a><br />
<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_INCLUDE">XML_SCHEMAP_SRC_INCLUDE</a><br />
<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE">XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE</a><br />
+<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_REDEFINE">XML_SCHEMAP_SRC_REDEFINE</a><br />
<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_RESOLVE">XML_SCHEMAP_SRC_RESOLVE</a><br />
<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE">XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE</a><br />
<a href="html/libxml-xmlerror.html#XML_SCHEMAP_SRC_SIMPLE_TYPE_1">XML_SCHEMAP_SRC_SIMPLE_TYPE_1</a><br />
@@ -1091,6 +1142,12 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_UNKNOWN">XML_SCHEMAS_UNKNOWN</a><br />
<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_USHORT">XML_SCHEMAS_USHORT</a><br />
<a href="html/libxml-schemasInternals.html#XML_SCHEMAS_WILDCARD_COMPLETE">XML_SCHEMAS_WILDCARD_COMPLETE</a><br />
+<a href="html/libxml-schematron.html#XML_SCHEMATRON_OUT_BUFFER">XML_SCHEMATRON_OUT_BUFFER</a><br />
+<a href="html/libxml-schematron.html#XML_SCHEMATRON_OUT_FILE">XML_SCHEMATRON_OUT_FILE</a><br />
+<a href="html/libxml-schematron.html#XML_SCHEMATRON_OUT_IO">XML_SCHEMATRON_OUT_IO</a><br />
+<a href="html/libxml-schematron.html#XML_SCHEMATRON_OUT_QUIET">XML_SCHEMATRON_OUT_QUIET</a><br />
+<a href="html/libxml-schematron.html#XML_SCHEMATRON_OUT_TEXT">XML_SCHEMATRON_OUT_TEXT</a><br />
+<a href="html/libxml-schematron.html#XML_SCHEMATRON_OUT_XML">XML_SCHEMATRON_OUT_XML</a><br />
<a href="html/libxml-xmlerror.html#XML_SCHEMAV_ATTRINVALID">XML_SCHEMAV_ATTRINVALID</a><br />
<a href="html/libxml-xmlerror.html#XML_SCHEMAV_ATTRUNKNOWN">XML_SCHEMAV_ATTRUNKNOWN</a><br />
<a href="html/libxml-xmlerror.html#XML_SCHEMAV_CONSTRUCT">XML_SCHEMAV_CONSTRUCT</a><br />
@@ -1267,6 +1324,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlerror.html#XML_XINCLUDE_XPTR_RESULT">XML_XINCLUDE_XPTR_RESULT</a><br />
<a href="html/libxml-tree.html#XML_XML_ID">XML_XML_ID</a><br />
<a href="html/libxml-tree.html#XML_XML_NAMESPACE">XML_XML_NAMESPACE</a><br />
+<a href="html/libxml-xpath.html#XML_XPATH_CHECKNS">XML_XPATH_CHECKNS</a><br />
<a href="html/libxml-xmlerror.html#XML_XPATH_ENCODING_ERROR">XML_XPATH_ENCODING_ERROR</a><br />
<a href="html/libxml-xmlerror.html#XML_XPATH_EXPRESSION_OK">XML_XPATH_EXPRESSION_OK</a><br />
<a href="html/libxml-xmlerror.html#XML_XPATH_EXPR_ERROR">XML_XPATH_EXPR_ERROR</a><br />
@@ -1278,6 +1336,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlerror.html#XML_XPATH_INVALID_PREDICATE_ERROR">XML_XPATH_INVALID_PREDICATE_ERROR</a><br />
<a href="html/libxml-xmlerror.html#XML_XPATH_INVALID_TYPE">XML_XPATH_INVALID_TYPE</a><br />
<a href="html/libxml-xmlerror.html#XML_XPATH_MEMORY_ERROR">XML_XPATH_MEMORY_ERROR</a><br />
+<a href="html/libxml-xpath.html#XML_XPATH_NOVAR">XML_XPATH_NOVAR</a><br />
<a href="html/libxml-xmlerror.html#XML_XPATH_NUMBER_ERROR">XML_XPATH_NUMBER_ERROR</a><br />
<a href="html/libxml-xmlerror.html#XML_XPATH_START_LITERAL_ERROR">XML_XPATH_START_LITERAL_ERROR</a><br />
<a href="html/libxml-xmlerror.html#XML_XPATH_UNCLOSED_ERROR">XML_XPATH_UNCLOSED_ERROR</a><br />
@@ -1419,6 +1478,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
</p><h2>Letter e:</h2><p><a href="html/libxml-SAX.html#elementDecl">elementDecl</a><br />
<a href="html/libxml-parser.html#elementDeclSAXFunc">elementDeclSAXFunc</a><br />
+<a href="html/libxml-xmlregexp.html#emptyExp">emptyExp</a><br />
<a href="html/libxml-SAX.html#endDocument">endDocument</a><br />
<a href="html/libxml-parser.html#endDocumentSAXFunc">endDocumentSAXFunc</a><br />
<a href="html/libxml-SAX.html#endElement">endElement</a><br />
@@ -1430,6 +1490,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-SAX.html#externalSubset">externalSubset</a><br />
<a href="html/libxml-parser.html#externalSubsetSAXFunc">externalSubsetSAXFunc</a><br />
</p><h2>Letter f:</h2><p><a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-xmlregexp.html#forbiddenExp">forbiddenExp</a><br />
<a href="html/libxml-nanoftp.html#ftpDataCallback">ftpDataCallback</a><br />
<a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
</p><h2>Letter g:</h2><p><a href="html/libxml-SAX.html#getColumnNumber">getColumnNumber</a><br />
@@ -1620,6 +1681,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounter">xmlAutomataNewCounter</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewEpsilon">xmlAutomataNewEpsilon</a><br />
+<a href="html/libxml-xmlautomata.html#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a><br />
<a href="html/libxml-xmlautomata.html#xmlAutomataNewState">xmlAutomataNewState</a><br />
@@ -1854,7 +1916,32 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlerror.html#xmlErrorDomain">xmlErrorDomain</a><br />
<a href="html/libxml-xmlerror.html#xmlErrorLevel">xmlErrorLevel</a><br />
<a href="html/libxml-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxt">xmlExpCtxt</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxtNbCons">xmlExpCtxtNbCons</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxtNbNodes">xmlExpCtxtNbNodes</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpDump">xmlExpDump</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpFree">xmlExpFree</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpFreeCtxt">xmlExpFreeCtxt</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#xmlExpIsNillable">xmlExpIsNillable</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpMaxToken">xmlExpMaxToken</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewAtom">xmlExpNewAtom</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNode">xmlExpNode</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNodeType">xmlExpNodeType</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpRef">xmlExpRef</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpSubsume">xmlExpSubsume</a><br />
<a href="html/libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</a><br />
+<a href="html/libxml-parser.html#xmlFeature">xmlFeature</a><br />
<a href="html/libxml-xmlIO.html#xmlFileClose">xmlFileClose</a><br />
<a href="html/libxml-xmlIO.html#xmlFileMatch">xmlFileMatch</a><br />
<a href="html/libxml-xmlIO.html#xmlFileOpen">xmlFileOpen</a><br />
@@ -1934,6 +2021,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-globals.html#xmlGlobalState">xmlGlobalState</a><br />
<a href="html/libxml-globals.html#xmlGlobalStatePtr">xmlGlobalStatePtr</a><br />
<a href="html/libxml-parserInternals.html#xmlHandleEntity">xmlHandleEntity</a><br />
+<a href="html/libxml-parser.html#xmlHasFeature">xmlHasFeature</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-hash.html#xmlHashAddEntry">xmlHashAddEntry</a><br />
@@ -2310,6 +2398,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-parserInternals.html#xmlParseSystemLiteral">xmlParseSystemLiteral</a><br />
<a href="html/libxml-parserInternals.html#xmlParseTextDecl">xmlParseTextDecl</a><br />
<a href="html/libxml-uri.html#xmlParseURI">xmlParseURI</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
<a href="html/libxml-uri.html#xmlParseURIReference">xmlParseURIReference</a><br />
<a href="html/libxml-parserInternals.html#xmlParseVersionInfo">xmlParseVersionInfo</a><br />
<a href="html/libxml-parserInternals.html#xmlParseVersionNum">xmlParseVersionNum</a><br />
@@ -2367,6 +2456,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-pattern.html#xmlPatternGetStreamCtxt">xmlPatternGetStreamCtxt</a><br />
<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
<a href="html/libxml-pattern.html#xmlPatternMaxDepth">xmlPatternMaxDepth</a><br />
+<a href="html/libxml-pattern.html#xmlPatternMinDepth">xmlPatternMinDepth</a><br />
<a href="html/libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a><br />
<a href="html/libxml-pattern.html#xmlPatternStreamable">xmlPatternStreamable</a><br />
<a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
@@ -2455,6 +2545,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGSetParserErrors">xmlRelaxNGSetParserErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidErrors">xmlRelaxNGSetValidErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGSetValidStructuredErrors">xmlRelaxNGSetValidStructuredErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGValidCtxt">xmlRelaxNGValidCtxt</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGValidErr">xmlRelaxNGValidErr</a><br />
@@ -2607,6 +2698,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a><br />
<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidOptions">xmlSchemaSetValidOptions</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaSetValidStructuredErrors">xmlSchemaSetValidStructuredErrors</a><br />
<a href="html/libxml-schemasInternals.html#xmlSchemaType">xmlSchemaType</a><br />
<a href="html/libxml-schemasInternals.html#xmlSchemaTypeLink">xmlSchemaTypeLink</a><br />
<a href="html/libxml-schemasInternals.html#xmlSchemaTypeLinkPtr">xmlSchemaTypeLinkPtr</a><br />
@@ -2644,6 +2736,24 @@ A:link, A:visited, A:active { text-decoration: underline }
<a href="html/libxml-schemasInternals.html#xmlSchemaWildcardNs">xmlSchemaWildcardNs</a><br />
<a href="html/libxml-schemasInternals.html#xmlSchemaWildcardNsPtr">xmlSchemaWildcardNsPtr</a><br />
<a href="html/libxml-schemasInternals.html#xmlSchemaWildcardPtr">xmlSchemaWildcardPtr</a><br />
+<a href="html/libxml-schematron.html#xmlSchematron">xmlSchematron</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronFree">xmlSchematronFree</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronFreeParserCtxt">xmlSchematronFreeParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronFreeValidCtxt">xmlSchematronFreeValidCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewDocParserCtxt">xmlSchematronNewDocParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewMemParserCtxt">xmlSchematronNewMemParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewParserCtxt">xmlSchematronNewParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronNewValidCtxt">xmlSchematronNewValidCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronParse">xmlSchematronParse</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronParserCtxt">xmlSchematronParserCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronParserCtxtPtr">xmlSchematronParserCtxtPtr</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronPtr">xmlSchematronPtr</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidCtxt">xmlSchematronValidCtxt</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidCtxtPtr">xmlSchematronValidCtxtPtr</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidOptions">xmlSchematronValidOptions</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidateDoc">xmlSchematronValidateDoc</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidityErrorFunc">xmlSchematronValidityErrorFunc</a><br />
+<a href="html/libxml-schematron.html#xmlSchematronValidityWarningFunc">xmlSchematronValidityWarningFunc</a><br />
<a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
<a href="html/libxml-tree.html#xmlSearchNsByHref">xmlSearchNsByHref</a><br />
<a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 03b74ae..c504fce 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -165,6 +165,7 @@ TEST_PUSH = @TEST_PUSH@
TEST_REGEXPS = @TEST_REGEXPS@
TEST_SAX = @TEST_SAX@
TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_SCHEMATRON = @TEST_SCHEMATRON@
TEST_THREADS = @TEST_THREADS@
TEST_VALID = @TEST_VALID@
TEST_VTIME = @TEST_VTIME@
@@ -200,6 +201,7 @@ WITH_REGEXPS = @WITH_REGEXPS@
WITH_RUN_DEBUG = @WITH_RUN_DEBUG@
WITH_SAX1 = @WITH_SAX1@
WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_SCHEMATRON = @WITH_SCHEMATRON@
WITH_THREADS = @WITH_THREADS@
WITH_TREE = @WITH_TREE@
WITH_TRIO = @WITH_TRIO@
diff --git a/doc/XSLT.html b/doc/XSLT.html
index 893dadb..7212cb6 100644
--- a/doc/XSLT.html
+++ b/doc/XSLT.html
@@ -10,5 +10,4 @@ A:link, A:visited, A:active { text-decoration: underline }
</style><title>XSLT</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>XSLT</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="http://xmlsoft.org/wiki">Wiki</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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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>Check <a href="http://xmlsoft.org/XSLT">the separate libxslt page</a></p><p><a href="http://www.w3.org/TR/xslt">XSL Transformations</a>, is a
language for transforming XML documents into other XML documents (or
HTML/textual output).</p><p>A separate library called libxslt is available implementing XSLT-1.0 for
-libxml2. This module "libxslt" too can be found in the Gnome CVS base.</p><p>You can check the <a href="http://cvs.gnome.org/lxr/source/libxslt/FEATURES">features</a>
-supported and the progresses on the <a href="http://cvs.gnome.org/lxr/source/libxslt/ChangeLog" name="Changelog" id="Changelog">Changelog</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>
+libxml2. This module "libxslt" too can be found in the Gnome CVS base.</p><p>You can check the progresses on the libxslt <a href="http://xmlsoft.org/XSLT/ChangeLog.html">Changelog</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>
diff --git a/doc/apibuild.py b/doc/apibuild.py
index a5275f1..8a11db0 100755
--- a/doc/apibuild.py
+++ b/doc/apibuild.py
@@ -63,6 +63,7 @@ ignored_words = {
"EXSLTPUBFUN": (0, "Special macro for extern funcs for win32"),
"XMLCALL": (0, "Special macro for win32 calls"),
"XSLTCALL": (0, "Special macro for win32 calls"),
+ "XMLCDECL": (0, "Special macro for win32 calls"),
"EXSLTCALL": (0, "Special macro for win32 calls"),
"__declspec": (3, "Windows keyword"),
"__stdcall": (0, "Windows keyword"),
diff --git a/doc/downloads.html b/doc/downloads.html
index 24ca61e..b0347d7 100644
--- a/doc/downloads.html
+++ b/doc/downloads.html
@@ -22,6 +22,7 @@ Windows binaries made by Igor Zlatovic are available in the <a href="http://xmls
<li><a href="mailto:Steve.Ball@explain.com.au">Steve Ball</a> provides <a href="http://www.explain.com.au/oss/libxml2xslt.html">Mac Os X
binaries</a>.</li>
<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 W3C cvs base libxml2 module, updated hourly <a href="ftp://xmlsoft.org/libxml2-cvs-snapshot.tar.gz">libxml2-cvs-snapshot.tar.gz</a>.</li>
<li>Docs, content of the web site, the list archive included <a href="ftp://xmlsoft.org/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
diff --git a/doc/elfgcchack.xsl b/doc/elfgcchack.xsl
index 8f24aed..11169f9 100644
--- a/doc/elfgcchack.xsl
+++ b/doc/elfgcchack.xsl
@@ -43,6 +43,7 @@
#include "libxml/SAX2.h"
#include "libxml/SAX.h"
#include "libxml/schemasInternals.h"
+#include "libxml/schematron.h"
#include "libxml/threads.h"
#include "libxml/tree.h"
#include "libxml/uri.h"
diff --git a/doc/examples/Makefile.in b/doc/examples/Makefile.in
index c64fa26..de15f68 100644
--- a/doc/examples/Makefile.in
+++ b/doc/examples/Makefile.in
@@ -214,6 +214,7 @@ TEST_PUSH = @TEST_PUSH@
TEST_REGEXPS = @TEST_REGEXPS@
TEST_SAX = @TEST_SAX@
TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_SCHEMATRON = @TEST_SCHEMATRON@
TEST_THREADS = @TEST_THREADS@
TEST_VALID = @TEST_VALID@
TEST_VTIME = @TEST_VTIME@
@@ -249,6 +250,7 @@ WITH_REGEXPS = @WITH_REGEXPS@
WITH_RUN_DEBUG = @WITH_RUN_DEBUG@
WITH_SAX1 = @WITH_SAX1@
WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_SCHEMATRON = @WITH_SCHEMATRON@
WITH_THREADS = @WITH_THREADS@
WITH_TREE = @WITH_TREE@
WITH_TRIO = @WITH_TRIO@
diff --git a/doc/html/book1.html b/doc/html/book1.html
index fde1c94..2ec7448 100644
--- a/doc/html/book1.html
+++ b/doc/html/book1.html
@@ -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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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>
diff --git a/doc/html/index.html b/doc/html/index.html
index fde1c94..2ec7448 100644
--- a/doc/html/index.html
+++ b/doc/html/index.html
@@ -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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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>
diff --git a/doc/html/libxml-HTMLparser.html b/doc/html/libxml-HTMLparser.html
index bc3ea48..8043542 100644
--- a/doc/html/libxml-HTMLparser.html
+++ b/doc/html/libxml-HTMLparser.html
@@ -86,11 +86,13 @@ A:link, A:visited, A:active { text-decoration: underline }
const char * name : The entity name
const char * desc : the description
}</pre><h3>Enum <a name="htmlParserOption" id="htmlParserOption">htmlParserOption</a></h3><pre class="programlisting">Enum htmlParserOption {
+ <a name="HTML_PARSE_RECOVER" id="HTML_PARSE_RECOVER">HTML_PARSE_RECOVER</a> = 1 : Relaxed parsing
<a name="HTML_PARSE_NOERROR" id="HTML_PARSE_NOERROR">HTML_PARSE_NOERROR</a> = 32 : suppress error reports
<a name="HTML_PARSE_NOWARNING" id="HTML_PARSE_NOWARNING">HTML_PARSE_NOWARNING</a> = 64 : suppress warning reports
<a name="HTML_PARSE_PEDANTIC" id="HTML_PARSE_PEDANTIC">HTML_PARSE_PEDANTIC</a> = 128 : pedantic error reporting
<a name="HTML_PARSE_NOBLANKS" id="HTML_PARSE_NOBLANKS">HTML_PARSE_NOBLANKS</a> = 256 : remove blank nodes
<a name="HTML_PARSE_NONET" id="HTML_PARSE_NONET">HTML_PARSE_NONET</a> = 2048 : Forbid network access
+ <a name="HTML_PARSE_COMPACT" id="HTML_PARSE_COMPACT">HTML_PARSE_COMPACT</a> = 65536 : compact small text nodes
}
</pre><h3>Enum <a name="htmlStatus" id="htmlStatus">htmlStatus</a></h3><pre class="programlisting">Enum htmlStatus {
<a name="HTML_NA" id="HTML_NA">HTML_NA</a> = 0 : something we don't check at all
diff --git a/doc/html/libxml-lib.html b/doc/html/libxml-lib.html
index fde1c94..2ec7448 100644
--- a/doc/html/libxml-lib.html
+++ b/doc/html/libxml-lib.html
@@ -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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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>
diff --git a/doc/html/libxml-parser.html b/doc/html/libxml-parser.html
index 719b8f1..c1448aa 100644
--- a/doc/html/libxml-parser.html
+++ b/doc/html/libxml-parser.html
@@ -10,7 +10,8 @@ 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 parser 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 parser 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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-nanohttp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-nanohttp.html">nanohttp</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-parserInternals.html">parserInternals</a></th><td><a accesskey="n" href="libxml-parserInternals.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>Interfaces, constants and types related to the XML parser </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a></pre><pre class="programlisting">#define <a href="#XML_DEFAULT_VERSION">XML_DEFAULT_VERSION</a></pre><pre class="programlisting">#define <a href="#XML_DETECT_IDS">XML_DETECT_IDS</a></pre><pre class="programlisting">#define <a href="#XML_SAX2_MAGIC">XML_SAX2_MAGIC</a></pre><pre class="programlisting">#define <a href="#XML_SKIP_IDS">XML_SKIP_IDS</a></pre><pre class="programlisting">Enum <a href="#xmlParserInputState">xmlParserInputState</a>
+ </style><title>Module parser 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 parser 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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-nanohttp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-nanohttp.html">nanohttp</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-parserInternals.html">parserInternals</a></th><td><a accesskey="n" href="libxml-parserInternals.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>Interfaces, constants and types related to the XML parser </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a></pre><pre class="programlisting">#define <a href="#XML_DEFAULT_VERSION">XML_DEFAULT_VERSION</a></pre><pre class="programlisting">#define <a href="#XML_DETECT_IDS">XML_DETECT_IDS</a></pre><pre class="programlisting">#define <a href="#XML_SAX2_MAGIC">XML_SAX2_MAGIC</a></pre><pre class="programlisting">#define <a href="#XML_SKIP_IDS">XML_SKIP_IDS</a></pre><pre class="programlisting">Enum <a href="#xmlFeature">xmlFeature</a>
+</pre><pre class="programlisting">Enum <a href="#xmlParserInputState">xmlParserInputState</a>
</pre><pre class="programlisting">Enum <a href="#xmlParserMode">xmlParserMode</a>
</pre><pre class="programlisting">Structure <a href="#xmlParserNodeInfo">xmlParserNodeInfo</a><br />struct _xmlParserNodeInfo
</pre><pre class="programlisting">Typedef <a href="libxml-parser.html#xmlParserNodeInfo">xmlParserNodeInfo</a> * <a name="xmlParserNodeInfoPtr" id="xmlParserNodeInfoPtr">xmlParserNodeInfoPtr</a>
@@ -131,6 +132,7 @@ void <a href="#warningSAXFunc">warningSAXFunc</a> (void * ctx, <br /> con
<pre class="programlisting"><a href="libxml-parser.html#xmlExternalEntityLoader">xmlExternalEntityLoader</a> <a href="#xmlGetExternalEntityLoader">xmlGetExternalEntityLoader</a> (void)</pre>
<pre class="programlisting">int <a href="#xmlGetFeature">xmlGetFeature</a> (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> const char * name, <br /> void * result)</pre>
<pre class="programlisting">int <a href="#xmlGetFeaturesList">xmlGetFeaturesList</a> (int * len, <br /> const char ** result)</pre>
+<pre class="programlisting">int <a href="#xmlHasFeature">xmlHasFeature</a> (<a href="libxml-parser.html#xmlFeature">xmlFeature</a> feature)</pre>
<pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> <a href="#xmlIOParseDTD">xmlIOParseDTD</a> (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> <a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)</pre>
<pre class="programlisting">void <a href="#xmlInitNodeInfoSeq">xmlInitNodeInfoSeq</a> (<a href="libxml-parser.html#xmlParserNodeInfoSeqPtr">xmlParserNodeInfoSeqPtr</a> seq)</pre>
<pre class="programlisting">void <a href="#xmlInitParser">xmlInitParser</a> (void)</pre>
@@ -190,7 +192,40 @@ void <a href="#xmlParserInputDeallocate">xmlParserInputDeallocate</a> (<a href="
<h3><a name="XML_DETECT_IDS" id="XML_DETECT_IDS"></a>Macro: XML_DETECT_IDS</h3><pre>#define XML_DETECT_IDS</pre><p>Bit in the loadsubset context field to tell to do ID/REFs lookups. Use it to initialize xmlLoadExtDtdDefaultValue.</p>
<h3><a name="XML_SAX2_MAGIC" id="XML_SAX2_MAGIC"></a>Macro: XML_SAX2_MAGIC</h3><pre>#define XML_SAX2_MAGIC</pre><p>Special constant found in SAX2 blocks initialized fields</p>
<h3><a name="XML_SKIP_IDS" id="XML_SKIP_IDS"></a>Macro: XML_SKIP_IDS</h3><pre>#define XML_SKIP_IDS</pre><p>Bit in the loadsubset context field to tell to not do ID/REFs registration. Used to initialize <a href="libxml-globals.html#xmlLoadExtDtdDefaultValue">xmlLoadExtDtdDefaultValue</a> in some special cases.</p>
-<h3>Enum <a name="xmlParserInputState" id="xmlParserInputState">xmlParserInputState</a></h3><pre class="programlisting">Enum xmlParserInputState {
+<h3>Enum <a name="xmlFeature" id="xmlFeature">xmlFeature</a></h3><pre class="programlisting">Enum xmlFeature {
+ <a name="XML_FEATURE_THREAD" id="XML_FEATURE_THREAD">XML_FEATURE_THREAD</a> = 1
+ <a name="XML_FEATURE_TREE" id="XML_FEATURE_TREE">XML_FEATURE_TREE</a> = 2
+ <a name="XML_FEATURE_OUTPUT" id="XML_FEATURE_OUTPUT">XML_FEATURE_OUTPUT</a> = 3
+ <a name="XML_FEATURE_PUSH" id="XML_FEATURE_PUSH">XML_FEATURE_PUSH</a> = 4
+ <a name="XML_FEATURE_READER" id="XML_FEATURE_READER">XML_FEATURE_READER</a> = 5
+ <a name="XML_FEATURE_PATTERN" id="XML_FEATURE_PATTERN">XML_FEATURE_PATTERN</a> = 6
+ <a name="XML_FEATURE_WRITER" id="XML_FEATURE_WRITER">XML_FEATURE_WRITER</a> = 7
+ <a name="XML_FEATURE_SAX1" id="XML_FEATURE_SAX1">XML_FEATURE_SAX1</a> = 8
+ <a name="XML_FEATURE_FTP" id="XML_FEATURE_FTP">XML_FEATURE_FTP</a> = 9
+ <a name="XML_FEATURE_HTTP" id="XML_FEATURE_HTTP">XML_FEATURE_HTTP</a> = 10
+ <a name="XML_FEATURE_VALID" id="XML_FEATURE_VALID">XML_FEATURE_VALID</a> = 11
+ <a name="XML_FEATURE_HTML" id="XML_FEATURE_HTML">XML_FEATURE_HTML</a> = 12
+ <a name="XML_FEATURE_LEGACY" id="XML_FEATURE_LEGACY">XML_FEATURE_LEGACY</a> = 13
+ <a name="XML_FEATURE_C14N" id="XML_FEATURE_C14N">XML_FEATURE_C14N</a> = 14
+ <a name="XML_FEATURE_CATALOG" id="XML_FEATURE_CATALOG">XML_FEATURE_CATALOG</a> = 15
+ <a name="XML_FEATURE_XPATH" id="XML_FEATURE_XPATH">XML_FEATURE_XPATH</a> = 16
+ <a name="XML_FEATURE_XPTR" id="XML_FEATURE_XPTR">XML_FEATURE_XPTR</a> = 17
+ <a name="XML_FEATURE_XINCLUDE" id="XML_FEATURE_XINCLUDE">XML_FEATURE_XINCLUDE</a> = 18
+ <a name="XML_FEATURE_ICONV" id="XML_FEATURE_ICONV">XML_FEATURE_ICONV</a> = 19
+ <a name="XML_FEATURE_ISO8859X" id="XML_FEATURE_ISO8859X">XML_FEATURE_ISO8859X</a> = 20
+ <a name="XML_FEATURE_UNICODE" id="XML_FEATURE_UNICODE">XML_FEATURE_UNICODE</a> = 21
+ <a name="XML_FEATURE_REGEXP" id="XML_FEATURE_REGEXP">XML_FEATURE_REGEXP</a> = 22
+ <a name="XML_FEATURE_AUTOMATA" id="XML_FEATURE_AUTOMATA">XML_FEATURE_AUTOMATA</a> = 23
+ <a name="XML_FEATURE_EXPR" id="XML_FEATURE_EXPR">XML_FEATURE_EXPR</a> = 24
+ <a name="XML_FEATURE_SCHEMAS" id="XML_FEATURE_SCHEMAS">XML_FEATURE_SCHEMAS</a> = 25
+ <a name="XML_FEATURE_SCHEMATRON" id="XML_FEATURE_SCHEMATRON">XML_FEATURE_SCHEMATRON</a> = 26
+ <a name="XML_FEATURE_MODULES" id="XML_FEATURE_MODULES">XML_FEATURE_MODULES</a> = 27
+ <a name="XML_FEATURE_DEBUG" id="XML_FEATURE_DEBUG">XML_FEATURE_DEBUG</a> = 28
+ <a name="XML_FEATURE_DEBUG_MEM" id="XML_FEATURE_DEBUG_MEM">XML_FEATURE_DEBUG_MEM</a> = 29
+ <a name="XML_FEATURE_DEBUG_RUN" id="XML_FEATURE_DEBUG_RUN">XML_FEATURE_DEBUG_RUN</a> = 30
+ <a name="XML_FEATURE_NONE" id="XML_FEATURE_NONE">XML_FEATURE_NONE</a> = 99999 : just to be sure of allocation size
+}
+</pre><h3>Enum <a name="xmlParserInputState" id="xmlParserInputState">xmlParserInputState</a></h3><pre class="programlisting">Enum xmlParserInputState {
<a name="XML_PARSER_EOF" id="XML_PARSER_EOF">XML_PARSER_EOF</a> = -1 : nothing is to be parsed
<a name="XML_PARSER_START" id="XML_PARSER_START">XML_PARSER_START</a> = 0 : nothing has been parsed
<a name="XML_PARSER_MISC" id="XML_PARSER_MISC">XML_PARSER_MISC</a> = 1 : Misc* before int subset
@@ -245,6 +280,7 @@ void <a href="#xmlParserInputDeallocate">xmlParserInputDeallocate</a> (<a href="
<a name="XML_PARSE_NSCLEAN" id="XML_PARSE_NSCLEAN">XML_PARSE_NSCLEAN</a> = 8192 : remove redundant namespaces declarations
<a name="XML_PARSE_NOCDATA" id="XML_PARSE_NOCDATA">XML_PARSE_NOCDATA</a> = 16384 : merge CDATA as text nodes
<a name="XML_PARSE_NOXINCNODE" id="XML_PARSE_NOXINCNODE">XML_PARSE_NOXINCNODE</a> = 32768 : do not generate XINCLUDE START/END nodes
+ <a name="XML_PARSE_COMPACT" id="XML_PARSE_COMPACT">XML_PARSE_COMPACT</a> = 65536 : compact small text nodes
}
</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
@@ -406,7 +442,9 @@ void warningSAXFunc (void * ctx, <br /> const char * msg, <br /> ...
</pre><p>Read the current value of one feature of this parser instance</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 XML/HTML parser context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the feature name</td></tr><tr><td><span class="term"><i><tt>result</tt></i>:</span></td><td>location to store the result</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case or error, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlGetFeaturesList" id="xmlGetFeaturesList"></a>Function: xmlGetFeaturesList</h3><pre class="programlisting">int xmlGetFeaturesList (int * len, <br /> const char ** result)<br />
</pre><p>Copy at most *@len feature names into the @result array</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the features name array (input/output)</td></tr><tr><td><span class="term"><i><tt>result</tt></i>:</span></td><td>an array of string to be filled with the features name.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case or error, or the total number of features, len is updated with the number of strings copied, strings must not be deallocated</td></tr></tbody></table></div><h3><a name="xmlIOParseDTD" id="xmlIOParseDTD"></a>Function: xmlIOParseDTD</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> xmlIOParseDTD (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> <a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the features name array (input/output)</td></tr><tr><td><span class="term"><i><tt>result</tt></i>:</span></td><td>an array of string to be filled with the features name.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case or error, or the total number of features, len is updated with the number of strings copied, strings must not be deallocated</td></tr></tbody></table></div><h3><a name="xmlHasFeature" id="xmlHasFeature"></a>Function: xmlHasFeature</h3><pre class="programlisting">int xmlHasFeature (<a href="libxml-parser.html#xmlFeature">xmlFeature</a> feature)<br />
+</pre><p>Examines if the library has been compiled with a given feature.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>feature</tt></i>:</span></td><td>the feature to be examined</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a non-zero value if the feature exist, otherwise zero. Returns zero (0) if the feature does not exist or an unknown unknown feature is requested, non-zero otherwise.</td></tr></tbody></table></div><h3><a name="xmlIOParseDTD" id="xmlIOParseDTD"></a>Function: xmlIOParseDTD</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> xmlIOParseDTD (<a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br /> <a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
</pre><p>Load and parse a DTD</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>the SAX handler block or NULL</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>an Input Buffer</td></tr><tr><td><span class="term"><i><tt>enc</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 resulting <a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> or NULL in case of error. @input will be freed at parsing end.</td></tr></tbody></table></div><h3><a name="xmlInitNodeInfoSeq" id="xmlInitNodeInfoSeq"></a>Function: xmlInitNodeInfoSeq</h3><pre class="programlisting">void xmlInitNodeInfoSeq (<a href="libxml-parser.html#xmlParserNodeInfoSeqPtr">xmlParserNodeInfoSeqPtr</a> seq)<br />
</pre><p>-- Initialize (set to initial state) node info sequence</p>
@@ -419,7 +457,7 @@ void warningSAXFunc (void * ctx, <br /> const char * msg, <br /> ...
<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="xmlLineNumbersDefault" id="xmlLineNumbersDefault"></a>Function: xmlLineNumbersDefault</h3><pre class="programlisting">int xmlLineNumbersDefault (int val)<br />
</pre><p>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.</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="xmlLoadExternalEntity" id="xmlLoadExternalEntity"></a>Function: xmlLoadExternalEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> xmlLoadExternalEntity (const char * URL, <br /> const char * ID, <br /> <a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br />
-</pre><p>Load an external entity, note that the use of this function for unparsed entities may generate problems TODO: a more generic External entity API must be designed</p>
+</pre><p>Load an external entity, note that the use of this function for unparsed entities may generate problems</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the URL for the entity to load</td></tr><tr><td><span class="term"><i><tt>ID</tt></i>:</span></td><td>the Public ID for the entity to load</td></tr><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the context in which the entity is called or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> or NULL</td></tr></tbody></table></div><h3><a name="xmlNewIOInputStream" id="xmlNewIOInputStream"></a>Function: xmlNewIOInputStream</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> xmlNewIOInputStream (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br /> <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br />
</pre><p>Create a new input stream structure encapsulating the @input into a stream suitable for the parser.</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 XML parser context</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>an I/O Input</td></tr><tr><td><span class="term"><i><tt>enc</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 input stream or NULL</td></tr></tbody></table></div><h3><a name="xmlNewParserCtxt" id="xmlNewParserCtxt"></a>Function: xmlNewParserCtxt</h3><pre class="programlisting"><a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> xmlNewParserCtxt (void)<br />
diff --git a/doc/html/libxml-pattern.html b/doc/html/libxml-pattern.html
index 0659588..2415881 100644
--- a/doc/html/libxml-pattern.html
+++ b/doc/html/libxml-pattern.html
@@ -24,8 +24,9 @@ The content of this structure is not made public by the API.
<pre class="programlisting"><a href="libxml-pattern.html#xmlStreamCtxtPtr">xmlStreamCtxtPtr</a> <a href="#xmlPatternGetStreamCtxt">xmlPatternGetStreamCtxt</a> (<a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> comp)</pre>
<pre class="programlisting">int <a href="#xmlPatternMatch">xmlPatternMatch</a> (<a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> comp, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
<pre class="programlisting">int <a href="#xmlPatternMaxDepth">xmlPatternMaxDepth</a> (<a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> comp)</pre>
+<pre class="programlisting">int <a href="#xmlPatternMinDepth">xmlPatternMinDepth</a> (<a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> comp)</pre>
<pre class="programlisting">int <a href="#xmlPatternStreamable">xmlPatternStreamable</a> (<a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> comp)</pre>
-<pre class="programlisting"><a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> <a href="#xmlPatterncompile">xmlPatterncompile</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pattern, <br /> <a href="libxml-dict.html#xmlDict">xmlDict</a> * dict, <br /> <a href="libxml-pattern.html#xmlPatternFlags">xmlPatternFlags</a> flags, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** namespaces)</pre>
+<pre class="programlisting"><a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> <a href="#xmlPatterncompile">xmlPatterncompile</a> (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pattern, <br /> <a href="libxml-dict.html#xmlDict">xmlDict</a> * dict, <br /> int flags, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** namespaces)</pre>
<pre class="programlisting">int <a href="#xmlStreamPop">xmlStreamPop</a> (<a href="libxml-pattern.html#xmlStreamCtxtPtr">xmlStreamCtxtPtr</a> stream)</pre>
<pre class="programlisting">int <a href="#xmlStreamPush">xmlStreamPush</a> (<a href="libxml-pattern.html#xmlStreamCtxtPtr">xmlStreamCtxtPtr</a> stream, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns)</pre>
<pre class="programlisting">int <a href="#xmlStreamPushAttr">xmlStreamPushAttr</a> (<a href="libxml-pattern.html#xmlStreamCtxtPtr">xmlStreamCtxtPtr</a> stream, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns)</pre>
@@ -54,11 +55,13 @@ The content of this structure is not made public by the API.
</pre><p>Test whether the node matches the pattern</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>comp</tt></i>:</span></td><td>the precompiled pattern</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>1 if it matches, 0 if it doesn't and -1 in case of failure</td></tr></tbody></table></div><h3><a name="xmlPatternMaxDepth" id="xmlPatternMaxDepth"></a>Function: xmlPatternMaxDepth</h3><pre class="programlisting">int xmlPatternMaxDepth (<a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> comp)<br />
</pre><p>Check the maximum depth reachable by a pattern</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>comp</tt></i>:</span></td><td>the precompiled pattern</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-2 if no limit (using //), otherwise the depth, and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlPatternStreamable" id="xmlPatternStreamable"></a>Function: xmlPatternStreamable</h3><pre class="programlisting">int xmlPatternStreamable (<a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> comp)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>comp</tt></i>:</span></td><td>the precompiled pattern</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-2 if no limit (using //), otherwise the depth, and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlPatternMinDepth" id="xmlPatternMinDepth"></a>Function: xmlPatternMinDepth</h3><pre class="programlisting">int xmlPatternMinDepth (<a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> comp)<br />
+</pre><p>Check the minimum depth reachable by a pattern, 0 mean the / or . are part of the set.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>comp</tt></i>:</span></td><td>the precompiled pattern</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error otherwise the depth,</td></tr></tbody></table></div><h3><a name="xmlPatternStreamable" id="xmlPatternStreamable"></a>Function: xmlPatternStreamable</h3><pre class="programlisting">int xmlPatternStreamable (<a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> comp)<br />
</pre><p>Check if the pattern is streamable i.e. xmlPatternGetStreamCtxt() should work.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>comp</tt></i>:</span></td><td>the precompiled pattern</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if streamable, 0 if not and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlPatterncompile" id="xmlPatterncompile"></a>Function: xmlPatterncompile</h3><pre class="programlisting"><a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> xmlPatterncompile (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pattern, <br /> <a href="libxml-dict.html#xmlDict">xmlDict</a> * dict, <br /> <a href="libxml-pattern.html#xmlPatternFlags">xmlPatternFlags</a> flags, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** namespaces)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>comp</tt></i>:</span></td><td>the precompiled pattern</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if streamable, 0 if not and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlPatterncompile" id="xmlPatterncompile"></a>Function: xmlPatterncompile</h3><pre class="programlisting"><a href="libxml-pattern.html#xmlPatternPtr">xmlPatternPtr</a> xmlPatterncompile (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * pattern, <br /> <a href="libxml-dict.html#xmlDict">xmlDict</a> * dict, <br /> int flags, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** namespaces)<br />
</pre><p>Compile a pattern.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pattern</tt></i>:</span></td><td>the pattern to compile</td></tr><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>an optional dictionary for interned strings</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>compilation flags, undefined yet</td></tr><tr><td><span class="term"><i><tt>namespaces</tt></i>:</span></td><td>the prefix definitions, array of [URI, prefix] or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the compiled form of the pattern or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlStreamPop" id="xmlStreamPop"></a>Function: xmlStreamPop</h3><pre class="programlisting">int xmlStreamPop (<a href="libxml-pattern.html#xmlStreamCtxtPtr">xmlStreamCtxtPtr</a> stream)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>pattern</tt></i>:</span></td><td>the pattern to compile</td></tr><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>an optional dictionary for interned strings</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>compilation flags, see <a href="libxml-pattern.html#xmlPatternFlags">xmlPatternFlags</a></td></tr><tr><td><span class="term"><i><tt>namespaces</tt></i>:</span></td><td>the prefix definitions, array of [URI, prefix] or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the compiled form of the pattern or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlStreamPop" id="xmlStreamPop"></a>Function: xmlStreamPop</h3><pre class="programlisting">int xmlStreamPop (<a href="libxml-pattern.html#xmlStreamCtxtPtr">xmlStreamCtxtPtr</a> stream)<br />
</pre><p>push one level from the stream.</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>stream</tt></i>:</span></td><td>the stream context</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="xmlStreamPush" id="xmlStreamPush"></a>Function: xmlStreamPush</h3><pre class="programlisting">int xmlStreamPush (<a href="libxml-pattern.html#xmlStreamCtxtPtr">xmlStreamCtxtPtr</a> stream, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns)<br />
</pre><p>Push new data onto the stream. NOTE: if the call xmlPatterncompile() indicated a dictionary, then strings for name and ns will be expected to come from the dictionary. Both @name and @ns being NULL means the / i.e. the root of the document. This can also act as a reset.</p>
diff --git a/doc/html/libxml-relaxng.html b/doc/html/libxml-relaxng.html
index 942aac3..637f27f 100644
--- a/doc/html/libxml-relaxng.html
+++ b/doc/html/libxml-relaxng.html
@@ -37,6 +37,7 @@ The content of this structure is not made public by the API.
<pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGPtr">xmlRelaxNGPtr</a> <a href="#xmlRelaxNGParse">xmlRelaxNGParse</a> (<a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> ctxt)</pre>
<pre class="programlisting">void <a href="#xmlRelaxNGSetParserErrors">xmlRelaxNGSetParserErrors</a> (<a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> ctxt, <br /> <a href="libxml-relaxng.html#xmlRelaxNGValidityErrorFunc">xmlRelaxNGValidityErrorFunc</a> err, <br /> <a href="libxml-relaxng.html#xmlRelaxNGValidityWarningFunc">xmlRelaxNGValidityWarningFunc</a> warn, <br /> void * ctx)</pre>
<pre class="programlisting">void <a href="#xmlRelaxNGSetValidErrors">xmlRelaxNGSetValidErrors</a> (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br /> <a href="libxml-relaxng.html#xmlRelaxNGValidityErrorFunc">xmlRelaxNGValidityErrorFunc</a> err, <br /> <a href="libxml-relaxng.html#xmlRelaxNGValidityWarningFunc">xmlRelaxNGValidityWarningFunc</a> warn, <br /> void * ctx)</pre>
+<pre class="programlisting">void <a href="#xmlRelaxNGSetValidStructuredErrors">xmlRelaxNGSetValidStructuredErrors</a> (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> serror, <br /> void * ctx)</pre>
<pre class="programlisting">int <a href="#xmlRelaxNGValidateDoc">xmlRelaxNGValidateDoc</a> (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
<pre class="programlisting">int <a href="#xmlRelaxNGValidateFullElement">xmlRelaxNGValidateFullElement</a> (<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)</pre>
<pre class="programlisting">int <a href="#xmlRelaxNGValidatePopElement">xmlRelaxNGValidatePopElement</a> (<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)</pre>
@@ -135,7 +136,9 @@ The content of this structure is not made public by the API.
</pre><p>Set the callback functions used to handle errors for a validation 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>a Relax-NG validation context</td></tr><tr><td><span class="term"><i><tt>err</tt></i>:</span></td><td>the error callback</td></tr><tr><td><span class="term"><i><tt>warn</tt></i>:</span></td><td>the warning callback</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>contextual data for the callbacks</td></tr></tbody></table></div><h3><a name="xmlRelaxNGSetValidErrors" id="xmlRelaxNGSetValidErrors"></a>Function: xmlRelaxNGSetValidErrors</h3><pre class="programlisting">void xmlRelaxNGSetValidErrors (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br /> <a href="libxml-relaxng.html#xmlRelaxNGValidityErrorFunc">xmlRelaxNGValidityErrorFunc</a> err, <br /> <a href="libxml-relaxng.html#xmlRelaxNGValidityWarningFunc">xmlRelaxNGValidityWarningFunc</a> warn, <br /> void * ctx)<br />
</pre><p>Set the error and warning callback informations</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 Relax-NG validation context</td></tr><tr><td><span class="term"><i><tt>err</tt></i>:</span></td><td>the error function</td></tr><tr><td><span class="term"><i><tt>warn</tt></i>:</span></td><td>the warning function</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the functions context</td></tr></tbody></table></div><h3><a name="xmlRelaxNGValidateDoc" id="xmlRelaxNGValidateDoc"></a>Function: xmlRelaxNGValidateDoc</h3><pre class="programlisting">int xmlRelaxNGValidateDoc (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br /> <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>ctxt</tt></i>:</span></td><td>a Relax-NG validation context</td></tr><tr><td><span class="term"><i><tt>err</tt></i>:</span></td><td>the error function</td></tr><tr><td><span class="term"><i><tt>warn</tt></i>:</span></td><td>the warning function</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the functions context</td></tr></tbody></table></div><h3><a name="xmlRelaxNGSetValidStructuredErrors" id="xmlRelaxNGSetValidStructuredErrors"></a>Function: xmlRelaxNGSetValidStructuredErrors</h3><pre class="programlisting">void xmlRelaxNGSetValidStructuredErrors (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> serror, <br /> void * ctx)<br />
+</pre><p>Set the structured error callback</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 Relax-NG validation context</td></tr><tr><td><span class="term"><i><tt>serror</tt></i>:</span></td><td>the structured error function</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the functions context</td></tr></tbody></table></div><h3><a name="xmlRelaxNGValidateDoc" id="xmlRelaxNGValidateDoc"></a>Function: xmlRelaxNGValidateDoc</h3><pre class="programlisting">int xmlRelaxNGValidateDoc (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
</pre><p>Validate a document tree in memory.</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 Relax-NG validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a parsed document tree</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 internal or API error.</td></tr></tbody></table></div><h3><a name="xmlRelaxNGValidateFullElement" id="xmlRelaxNGValidateFullElement"></a>Function: xmlRelaxNGValidateFullElement</h3><pre class="programlisting">int xmlRelaxNGValidateFullElement (<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>Validate a full subtree when xmlRelaxNGValidatePushElement() returned 0 and the content of the node has been expanded.</p>
diff --git a/doc/html/libxml-schemasInternals.html b/doc/html/libxml-schemasInternals.html
index bb0987d..e840774 100644
--- a/doc/html/libxml-schemasInternals.html
+++ b/doc/html/libxml-schemasInternals.html
@@ -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 schemasInternals 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 schemasInternals 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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-relaxng.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-relaxng.html">relaxng</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-threads.html">threads</a></th><td><a accesskey="n" href="libxml-threads.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>internal interfaces for the XML Schemas handling and schema validity checking </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#XML_SCHEMAS_ANYATTR_LAX">XML_SCHEMAS_ANYATTR_LAX</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ANYATTR_SKIP">XML_SCHEMAS_ANYATTR_SKIP</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ANYATTR_STRICT">XML_SCHEMAS_ANYATTR_STRICT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ANY_LAX">XML_SCHEMAS_ANY_LAX</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ANY_SKIP">XML_SCHEMAS_ANY_SKIP</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ANY_STRICT">XML_SCHEMAS_ANY_STRICT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTRGROUP_GLOBAL">XML_SCHEMAS_ATTRGROUP_GLOBAL</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTRGROUP_MARKED">XML_SCHEMAS_ATTRGROUP_MARKED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED">XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_FIXED">XML_SCHEMAS_ATTR_FIXED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_GLOBAL">XML_SCHEMAS_ATTR_GLOBAL</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_INTERNAL_RESOLVED">XML_SCHEMAS_ATTR_INTERNAL_RESOLVED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_NSDEFAULT">XML_SCHEMAS_ATTR_NSDEFAULT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_USE_OPTIONAL">XML_SCHEMAS_ATTR_USE_OPTIONAL</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_USE_PROHIBITED">XML_SCHEMAS_ATTR_USE_PROHIBITED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_USE_REQUIRED">XML_SCHEMAS_ATTR_USE_REQUIRED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION">XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION">XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION">XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_ABSTRACT">XML_SCHEMAS_ELEM_ABSTRACT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_BLOCK_ABSENT">XML_SCHEMAS_ELEM_BLOCK_ABSENT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_BLOCK_EXTENSION">XML_SCHEMAS_ELEM_BLOCK_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_BLOCK_RESTRICTION">XML_SCHEMAS_ELEM_BLOCK_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION">XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_CIRCULAR">XML_SCHEMAS_ELEM_CIRCULAR</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_DEFAULT">XML_SCHEMAS_ELEM_DEFAULT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_FINAL_ABSENT">XML_SCHEMAS_ELEM_FINAL_ABSENT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_FINAL_EXTENSION">XML_SCHEMAS_ELEM_FINAL_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_FINAL_RESTRICTION">XML_SCHEMAS_ELEM_FINAL_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_FIXED">XML_SCHEMAS_ELEM_FIXED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_GLOBAL">XML_SCHEMAS_ELEM_GLOBAL</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_INTERNAL_CHECKED">XML_SCHEMAS_ELEM_INTERNAL_CHECKED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_INTERNAL_RESOLVED">XML_SCHEMAS_ELEM_INTERNAL_RESOLVED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_NILLABLE">XML_SCHEMAS_ELEM_NILLABLE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_NSDEFAULT">XML_SCHEMAS_ELEM_NSDEFAULT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_REF">XML_SCHEMAS_ELEM_REF</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD">XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_TOPLEVEL">XML_SCHEMAS_ELEM_TOPLEVEL</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FACET_COLLAPSE">XML_SCHEMAS_FACET_COLLAPSE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FACET_PRESERVE">XML_SCHEMAS_FACET_PRESERVE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FACET_REPLACE">XML_SCHEMAS_FACET_REPLACE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FACET_UNKNOWN">XML_SCHEMAS_FACET_UNKNOWN</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FINAL_DEFAULT_EXTENSION">XML_SCHEMAS_FINAL_DEFAULT_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FINAL_DEFAULT_LIST">XML_SCHEMAS_FINAL_DEFAULT_LIST</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION">XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FINAL_DEFAULT_UNION">XML_SCHEMAS_FINAL_DEFAULT_UNION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_INCLUDING_CONVERT_NS">XML_SCHEMAS_INCLUDING_CONVERT_NS</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_QUALIF_ATTR">XML_SCHEMAS_QUALIF_ATTR</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_QUALIF_ELEM">XML_SCHEMAS_QUALIF_ELEM</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_ABSTRACT">XML_SCHEMAS_TYPE_ABSTRACT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_BLOCK_DEFAULT">XML_SCHEMAS_TYPE_BLOCK_DEFAULT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_BLOCK_EXTENSION">XML_SCHEMAS_TYPE_BLOCK_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_BLOCK_RESTRICTION">XML_SCHEMAS_TYPE_BLOCK_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE">XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION">XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION">XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_FACETSNEEDVALUE">XML_SCHEMAS_TYPE_FACETSNEEDVALUE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_FINAL_DEFAULT">XML_SCHEMAS_TYPE_FINAL_DEFAULT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_FINAL_EXTENSION">XML_SCHEMAS_TYPE_FINAL_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_FINAL_LIST">XML_SCHEMAS_TYPE_FINAL_LIST</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_FINAL_RESTRICTION">XML_SCHEMAS_TYPE_FINAL_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_FINAL_UNION">XML_SCHEMAS_TYPE_FINAL_UNION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_GLOBAL">XML_SCHEMAS_TYPE_GLOBAL</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_HAS_FACETS">XML_SCHEMAS_TYPE_HAS_FACETS</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_INTERNAL_INVALID">XML_SCHEMAS_TYPE_INTERNAL_INVALID</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_INTERNAL_RESOLVED">XML_SCHEMAS_TYPE_INTERNAL_RESOLVED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_MARKED">XML_SCHEMAS_TYPE_MARKED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_MIXED">XML_SCHEMAS_TYPE_MIXED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_NORMVALUENEEDED">XML_SCHEMAS_TYPE_NORMVALUENEEDED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD">XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_VARIETY_ABSENT">XML_SCHEMAS_TYPE_VARIETY_ABSENT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_VARIETY_ATOMIC">XML_SCHEMAS_TYPE_VARIETY_ATOMIC</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_VARIETY_LIST">XML_SCHEMAS_TYPE_VARIETY_LIST</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_VARIETY_UNION">XML_SCHEMAS_TYPE_VARIETY_UNION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE">XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE">XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_WHITESPACE_REPLACE">XML_SCHEMAS_TYPE_WHITESPACE_REPLACE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_WILDCARD_COMPLETE">XML_SCHEMAS_WILDCARD_COMPLETE</a></pre><pre class="programlisting">Structure <a href="#xmlSchemaAnnot">xmlSchemaAnnot</a><br />struct _xmlSchemaAnnot
+ </style><title>Module schemasInternals 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 schemasInternals 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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-relaxng.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-relaxng.html">relaxng</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-schematron.html">schematron</a></th><td><a accesskey="n" href="libxml-schematron.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>internal interfaces for the XML Schemas handling and schema validity checking </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#XML_SCHEMAS_ANYATTR_LAX">XML_SCHEMAS_ANYATTR_LAX</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ANYATTR_SKIP">XML_SCHEMAS_ANYATTR_SKIP</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ANYATTR_STRICT">XML_SCHEMAS_ANYATTR_STRICT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ANY_LAX">XML_SCHEMAS_ANY_LAX</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ANY_SKIP">XML_SCHEMAS_ANY_SKIP</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ANY_STRICT">XML_SCHEMAS_ANY_STRICT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTRGROUP_GLOBAL">XML_SCHEMAS_ATTRGROUP_GLOBAL</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTRGROUP_MARKED">XML_SCHEMAS_ATTRGROUP_MARKED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED">XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_FIXED">XML_SCHEMAS_ATTR_FIXED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_GLOBAL">XML_SCHEMAS_ATTR_GLOBAL</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_INTERNAL_RESOLVED">XML_SCHEMAS_ATTR_INTERNAL_RESOLVED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_NSDEFAULT">XML_SCHEMAS_ATTR_NSDEFAULT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_USE_OPTIONAL">XML_SCHEMAS_ATTR_USE_OPTIONAL</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_USE_PROHIBITED">XML_SCHEMAS_ATTR_USE_PROHIBITED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ATTR_USE_REQUIRED">XML_SCHEMAS_ATTR_USE_REQUIRED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION">XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION">XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION">XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_ABSTRACT">XML_SCHEMAS_ELEM_ABSTRACT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_BLOCK_ABSENT">XML_SCHEMAS_ELEM_BLOCK_ABSENT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_BLOCK_EXTENSION">XML_SCHEMAS_ELEM_BLOCK_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_BLOCK_RESTRICTION">XML_SCHEMAS_ELEM_BLOCK_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION">XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_CIRCULAR">XML_SCHEMAS_ELEM_CIRCULAR</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_DEFAULT">XML_SCHEMAS_ELEM_DEFAULT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_FINAL_ABSENT">XML_SCHEMAS_ELEM_FINAL_ABSENT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_FINAL_EXTENSION">XML_SCHEMAS_ELEM_FINAL_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_FINAL_RESTRICTION">XML_SCHEMAS_ELEM_FINAL_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_FIXED">XML_SCHEMAS_ELEM_FIXED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_GLOBAL">XML_SCHEMAS_ELEM_GLOBAL</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_INTERNAL_CHECKED">XML_SCHEMAS_ELEM_INTERNAL_CHECKED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_INTERNAL_RESOLVED">XML_SCHEMAS_ELEM_INTERNAL_RESOLVED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_NILLABLE">XML_SCHEMAS_ELEM_NILLABLE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_NSDEFAULT">XML_SCHEMAS_ELEM_NSDEFAULT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_REF">XML_SCHEMAS_ELEM_REF</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD">XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_ELEM_TOPLEVEL">XML_SCHEMAS_ELEM_TOPLEVEL</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FACET_COLLAPSE">XML_SCHEMAS_FACET_COLLAPSE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FACET_PRESERVE">XML_SCHEMAS_FACET_PRESERVE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FACET_REPLACE">XML_SCHEMAS_FACET_REPLACE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FACET_UNKNOWN">XML_SCHEMAS_FACET_UNKNOWN</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FINAL_DEFAULT_EXTENSION">XML_SCHEMAS_FINAL_DEFAULT_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FINAL_DEFAULT_LIST">XML_SCHEMAS_FINAL_DEFAULT_LIST</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION">XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_FINAL_DEFAULT_UNION">XML_SCHEMAS_FINAL_DEFAULT_UNION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_INCLUDING_CONVERT_NS">XML_SCHEMAS_INCLUDING_CONVERT_NS</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_QUALIF_ATTR">XML_SCHEMAS_QUALIF_ATTR</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_QUALIF_ELEM">XML_SCHEMAS_QUALIF_ELEM</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_ABSTRACT">XML_SCHEMAS_TYPE_ABSTRACT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_BLOCK_DEFAULT">XML_SCHEMAS_TYPE_BLOCK_DEFAULT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_BLOCK_EXTENSION">XML_SCHEMAS_TYPE_BLOCK_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_BLOCK_RESTRICTION">XML_SCHEMAS_TYPE_BLOCK_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE">XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION">XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION">XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_FACETSNEEDVALUE">XML_SCHEMAS_TYPE_FACETSNEEDVALUE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_FINAL_DEFAULT">XML_SCHEMAS_TYPE_FINAL_DEFAULT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_FINAL_EXTENSION">XML_SCHEMAS_TYPE_FINAL_EXTENSION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_FINAL_LIST">XML_SCHEMAS_TYPE_FINAL_LIST</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_FINAL_RESTRICTION">XML_SCHEMAS_TYPE_FINAL_RESTRICTION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_FINAL_UNION">XML_SCHEMAS_TYPE_FINAL_UNION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_GLOBAL">XML_SCHEMAS_TYPE_GLOBAL</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_HAS_FACETS">XML_SCHEMAS_TYPE_HAS_FACETS</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_INTERNAL_INVALID">XML_SCHEMAS_TYPE_INTERNAL_INVALID</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_INTERNAL_RESOLVED">XML_SCHEMAS_TYPE_INTERNAL_RESOLVED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_MARKED">XML_SCHEMAS_TYPE_MARKED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_MIXED">XML_SCHEMAS_TYPE_MIXED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_NORMVALUENEEDED">XML_SCHEMAS_TYPE_NORMVALUENEEDED</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD">XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_VARIETY_ABSENT">XML_SCHEMAS_TYPE_VARIETY_ABSENT</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_VARIETY_ATOMIC">XML_SCHEMAS_TYPE_VARIETY_ATOMIC</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_VARIETY_LIST">XML_SCHEMAS_TYPE_VARIETY_LIST</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_VARIETY_UNION">XML_SCHEMAS_TYPE_VARIETY_UNION</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE">XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE">XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_TYPE_WHITESPACE_REPLACE">XML_SCHEMAS_TYPE_WHITESPACE_REPLACE</a></pre><pre class="programlisting">#define <a href="#XML_SCHEMAS_WILDCARD_COMPLETE">XML_SCHEMAS_WILDCARD_COMPLETE</a></pre><pre class="programlisting">Structure <a href="#xmlSchemaAnnot">xmlSchemaAnnot</a><br />struct _xmlSchemaAnnot
</pre><pre class="programlisting">Typedef <a href="libxml-schemasInternals.html#xmlSchemaAnnot">xmlSchemaAnnot</a> * <a name="xmlSchemaAnnotPtr" id="xmlSchemaAnnotPtr">xmlSchemaAnnotPtr</a>
</pre><pre class="programlisting">Structure <a href="#xmlSchemaAttribute">xmlSchemaAttribute</a><br />struct _xmlSchemaAttribute
</pre><pre class="programlisting">Structure <a href="#xmlSchemaAttributeGroup">xmlSchemaAttributeGroup</a><br />struct _xmlSchemaAttributeGroup
diff --git a/doc/html/libxml-schematron.html b/doc/html/libxml-schematron.html
new file mode 100644
index 0000000..e81dd66
--- /dev/null
+++ b/doc/html/libxml-schematron.html
@@ -0,0 +1,77 @@
+<?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><style type="text/css">
+ div.deprecated pre.programlisting {border-style: double;border-color:red}
+ pre.programlisting {border-style: double;background: #EECFA1}
+ </style><title>Module schematron 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 schematron 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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-schemasInternals.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-schemasInternals.html">schemasInternals</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-threads.html">threads</a></th><td><a accesskey="n" href="libxml-threads.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>interface to the XML Schematron validity checking. </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlSchematron">xmlSchematron</a><br />struct _xmlSchematron
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Structure <a href="#xmlSchematronParserCtxt">xmlSchematronParserCtxt</a><br />struct _xmlSchematronParserCtxt
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-schematron.html#xmlSchematronParserCtxt">xmlSchematronParserCtxt</a> * <a name="xmlSchematronParserCtxtPtr" id="xmlSchematronParserCtxtPtr">xmlSchematronParserCtxtPtr</a>
+</pre><pre class="programlisting">Typedef <a href="libxml-schematron.html#xmlSchematron">xmlSchematron</a> * <a name="xmlSchematronPtr" id="xmlSchematronPtr">xmlSchematronPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlSchematronValidCtxt">xmlSchematronValidCtxt</a><br />struct _xmlSchematronValidCtxt
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-schematron.html#xmlSchematronValidCtxt">xmlSchematronValidCtxt</a> * <a name="xmlSchematronValidCtxtPtr" id="xmlSchematronValidCtxtPtr">xmlSchematronValidCtxtPtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlSchematronValidOptions">xmlSchematronValidOptions</a>
+</pre><pre class="programlisting">void <a href="#xmlSchematronFree">xmlSchematronFree</a> (<a href="libxml-schematron.html#xmlSchematronPtr">xmlSchematronPtr</a> schema)</pre>
+<pre class="programlisting">void <a href="#xmlSchematronFreeParserCtxt">xmlSchematronFreeParserCtxt</a> (<a href="libxml-schematron.html#xmlSchematronParserCtxtPtr">xmlSchematronParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlSchematronFreeValidCtxt">xmlSchematronFreeValidCtxt</a> (<a href="libxml-schematron.html#xmlSchematronValidCtxtPtr">xmlSchematronValidCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting"><a href="libxml-schematron.html#xmlSchematronParserCtxtPtr">xmlSchematronParserCtxtPtr</a> <a href="#xmlSchematronNewDocParserCtxt">xmlSchematronNewDocParserCtxt</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting"><a href="libxml-schematron.html#xmlSchematronParserCtxtPtr">xmlSchematronParserCtxtPtr</a> <a href="#xmlSchematronNewMemParserCtxt">xmlSchematronNewMemParserCtxt</a> (const char * buffer, <br /> int size)</pre>
+<pre class="programlisting"><a href="libxml-schematron.html#xmlSchematronParserCtxtPtr">xmlSchematronParserCtxtPtr</a> <a href="#xmlSchematronNewParserCtxt">xmlSchematronNewParserCtxt</a> (const char * URL)</pre>
+<pre class="programlisting"><a href="libxml-schematron.html#xmlSchematronValidCtxtPtr">xmlSchematronValidCtxtPtr</a> <a href="#xmlSchematronNewValidCtxt">xmlSchematronNewValidCtxt</a> (<a href="libxml-schematron.html#xmlSchematronPtr">xmlSchematronPtr</a> schema, <br /> int options)</pre>
+<pre class="programlisting"><a href="libxml-schematron.html#xmlSchematronPtr">xmlSchematronPtr</a> <a href="#xmlSchematronParse">xmlSchematronParse</a> (<a href="libxml-schematron.html#xmlSchematronParserCtxtPtr">xmlSchematronParserCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlSchematronValidateDoc">xmlSchematronValidateDoc</a> (<a href="libxml-schematron.html#xmlSchematronValidCtxtPtr">xmlSchematronValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> instance)</pre>
+<pre class="programlisting">Function type: <a href="#xmlSchematronValidityErrorFunc">xmlSchematronValidityErrorFunc</a>
+void <a href="#xmlSchematronValidityErrorFunc">xmlSchematronValidityErrorFunc</a> (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre>
+<pre class="programlisting">Function type: <a href="#xmlSchematronValidityWarningFunc">xmlSchematronValidityWarningFunc</a>
+void <a href="#xmlSchematronValidityWarningFunc">xmlSchematronValidityWarningFunc</a> (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre>
+<h2>Description</h2>
+<h3><a name="xmlSchematron" id="xmlSchematron">Structure xmlSchematron</a></h3><pre class="programlisting">Structure xmlSchematron<br />struct _xmlSchematron {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlSchematronParserCtxt" id="xmlSchematronParserCtxt">Structure xmlSchematronParserCtxt</a></h3><pre class="programlisting">Structure xmlSchematronParserCtxt<br />struct _xmlSchematronParserCtxt {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlSchematronValidCtxt" id="xmlSchematronValidCtxt">Structure xmlSchematronValidCtxt</a></h3><pre class="programlisting">Structure xmlSchematronValidCtxt<br />struct _xmlSchematronValidCtxt {
+The content of this structure is not made public by the API.
+}</pre><h3>Enum <a name="xmlSchematronValidOptions" id="xmlSchematronValidOptions">xmlSchematronValidOptions</a></h3><pre class="programlisting">Enum xmlSchematronValidOptions {
+ <a name="XML_SCHEMATRON_OUT_QUIET" id="XML_SCHEMATRON_OUT_QUIET">XML_SCHEMATRON_OUT_QUIET</a> = 1 : quiet no report
+ <a name="XML_SCHEMATRON_OUT_TEXT" id="XML_SCHEMATRON_OUT_TEXT">XML_SCHEMATRON_OUT_TEXT</a> = 2 : build a textual report
+ <a name="XML_SCHEMATRON_OUT_XML" id="XML_SCHEMATRON_OUT_XML">XML_SCHEMATRON_OUT_XML</a> = 4 : output SVRL
+ <a name="XML_SCHEMATRON_OUT_FILE" id="XML_SCHEMATRON_OUT_FILE">XML_SCHEMATRON_OUT_FILE</a> = 256 : output to a file descriptor
+ <a name="XML_SCHEMATRON_OUT_BUFFER" id="XML_SCHEMATRON_OUT_BUFFER">XML_SCHEMATRON_OUT_BUFFER</a> = 512 : output to a buffer
+ <a name="XML_SCHEMATRON_OUT_IO" id="XML_SCHEMATRON_OUT_IO">XML_SCHEMATRON_OUT_IO</a> = 1024 : output to I/O mechanism
+}
+</pre><h3><a name="xmlSchematronFree" id="xmlSchematronFree"></a>Function: xmlSchematronFree</h3><pre class="programlisting">void xmlSchematronFree (<a href="libxml-schematron.html#xmlSchematronPtr">xmlSchematronPtr</a> schema)<br />
+</pre><p>Deallocate a Schematron structure.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>schema</tt></i>:</span></td><td>a schema structure</td></tr></tbody></table></div><h3><a name="xmlSchematronFreeParserCtxt" id="xmlSchematronFreeParserCtxt"></a>Function: xmlSchematronFreeParserCtxt</h3><pre class="programlisting">void xmlSchematronFreeParserCtxt (<a href="libxml-schematron.html#xmlSchematronParserCtxtPtr">xmlSchematronParserCtxtPtr</a> ctxt)<br />
+</pre><p>Free the resources associated to the schema parser 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 schema parser context</td></tr></tbody></table></div><h3><a name="xmlSchematronFreeValidCtxt" id="xmlSchematronFreeValidCtxt"></a>Function: xmlSchematronFreeValidCtxt</h3><pre class="programlisting">void xmlSchematronFreeValidCtxt (<a href="libxml-schematron.html#xmlSchematronValidCtxtPtr">xmlSchematronValidCtxtPtr</a> ctxt)<br />
+</pre><p>Free the resources associated to the schema validation 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 schema validation context</td></tr></tbody></table></div><h3><a name="xmlSchematronNewDocParserCtxt" id="xmlSchematronNewDocParserCtxt"></a>Function: xmlSchematronNewDocParserCtxt</h3><pre class="programlisting"><a href="libxml-schematron.html#xmlSchematronParserCtxtPtr">xmlSchematronParserCtxtPtr</a> xmlSchematronNewDocParserCtxt (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+</pre><p>Create an XML Schematrons parse context for that document. NB. The document may be modified during the parsing process.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a preparsed document tree</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the parser context or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlSchematronNewMemParserCtxt" id="xmlSchematronNewMemParserCtxt"></a>Function: xmlSchematronNewMemParserCtxt</h3><pre class="programlisting"><a href="libxml-schematron.html#xmlSchematronParserCtxtPtr">xmlSchematronParserCtxtPtr</a> xmlSchematronNewMemParserCtxt (const char * buffer, <br /> int size)<br />
+</pre><p>Create an XML Schematrons parse context for that memory buffer expected to contain an XML Schematrons file.</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 pointer to a char array containing the schemas</td></tr><tr><td><span class="term"><i><tt>size</tt></i>:</span></td><td>the size of the array</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the parser context or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlSchematronNewParserCtxt" id="xmlSchematronNewParserCtxt"></a>Function: xmlSchematronNewParserCtxt</h3><pre class="programlisting"><a href="libxml-schematron.html#xmlSchematronParserCtxtPtr">xmlSchematronParserCtxtPtr</a> xmlSchematronNewParserCtxt (const char * URL)<br />
+</pre><p>Create an XML Schematrons parse context for that file/resource expected to contain an XML Schematrons file.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>URL</tt></i>:</span></td><td>the location of the schema</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the parser context or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlSchematronNewValidCtxt" id="xmlSchematronNewValidCtxt"></a>Function: xmlSchematronNewValidCtxt</h3><pre class="programlisting"><a href="libxml-schematron.html#xmlSchematronValidCtxtPtr">xmlSchematronValidCtxtPtr</a> xmlSchematronNewValidCtxt (<a href="libxml-schematron.html#xmlSchematronPtr">xmlSchematronPtr</a> schema, <br /> int options)<br />
+</pre><p>Create an XML Schematrons validation context based on the given schema.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>schema</tt></i>:</span></td><td>a precompiled XML Schematrons</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a set of <a href="libxml-schematron.html#xmlSchematronValidOptions">xmlSchematronValidOptions</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the validation context or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlSchematronParse" id="xmlSchematronParse"></a>Function: xmlSchematronParse</h3><pre class="programlisting"><a href="libxml-schematron.html#xmlSchematronPtr">xmlSchematronPtr</a> xmlSchematronParse (<a href="libxml-schematron.html#xmlSchematronParserCtxtPtr">xmlSchematronParserCtxtPtr</a> ctxt)<br />
+</pre><p>parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances.</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>Returns</tt></i>:</span></td><td>the internal XML Schematron structure built from the resource or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlSchematronValidateDoc" id="xmlSchematronValidateDoc"></a>Function: xmlSchematronValidateDoc</h3><pre class="programlisting">int xmlSchematronValidateDoc (<a href="libxml-schematron.html#xmlSchematronValidCtxtPtr">xmlSchematronValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> instance)<br />
+</pre><p>Validate a tree instance against the schematron</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 schema validation context</td></tr><tr><td><span class="term"><i><tt>instance</tt></i>:</span></td><td>the document instace tree</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of internal error and an error count otherwise.</td></tr></tbody></table></div><h3><a name="xmlSchematronValidityErrorFunc" id="xmlSchematronValidityErrorFunc"></a>Function type: xmlSchematronValidityErrorFunc</h3><pre class="programlisting">Function type: xmlSchematronValidityErrorFunc
+void xmlSchematronValidityErrorFunc (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre><p></p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td></td></tr></tbody></table></div><br />
+<h3><a name="xmlSchematronValidityWarningFunc" id="xmlSchematronValidityWarningFunc"></a>Function type: xmlSchematronValidityWarningFunc</h3><pre class="programlisting">Function type: xmlSchematronValidityWarningFunc
+void xmlSchematronValidityWarningFunc (void * ctx, <br /> const char * msg, <br /> ... ...)
+</pre><p></p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td></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>
diff --git a/doc/html/libxml-threads.html b/doc/html/libxml-threads.html
index bc66bb3..7df283b 100644
--- a/doc/html/libxml-threads.html
+++ b/doc/html/libxml-threads.html
@@ -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 threads 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 threads 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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-schemasInternals.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-schemasInternals.html">schemasInternals</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-tree.html">tree</a></th><td><a accesskey="n" href="libxml-tree.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>set of generic threading related routines should work with pthreads, Windows native or TLS threads </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlMutex">xmlMutex</a><br />struct _xmlMutex
+ </style><title>Module threads 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 threads 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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-schematron.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-schematron.html">schematron</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-tree.html">tree</a></th><td><a accesskey="n" href="libxml-tree.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>set of generic threading related routines should work with pthreads, Windows native or TLS threads </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlMutex">xmlMutex</a><br />struct _xmlMutex
The content of this structure is not made public by the API.
</pre><pre class="programlisting">Typedef <a href="libxml-threads.html#xmlMutex">xmlMutex</a> * <a name="xmlMutexPtr" id="xmlMutexPtr">xmlMutexPtr</a>
</pre><pre class="programlisting">Structure <a href="#xmlRMutex">xmlRMutex</a><br />struct _xmlRMutex
diff --git a/doc/html/libxml-tree.html b/doc/html/libxml-tree.html
index b7f9055..5a33b38 100644
--- a/doc/html/libxml-tree.html
+++ b/doc/html/libxml-tree.html
@@ -883,7 +883,7 @@ 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</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 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 />
</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 />
</pre><p>Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs.</p>
diff --git a/doc/html/libxml-uri.html b/doc/html/libxml-uri.html
index e46ed7f..702a88c 100644
--- a/doc/html/libxml-uri.html
+++ b/doc/html/libxml-uri.html
@@ -19,6 +19,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<pre class="programlisting">void <a href="#xmlFreeURI">xmlFreeURI</a> (<a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> uri)</pre>
<pre class="programlisting">int <a href="#xmlNormalizeURIPath">xmlNormalizeURIPath</a> (char * path)</pre>
<pre class="programlisting"><a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> <a href="#xmlParseURI">xmlParseURI</a> (const char * str)</pre>
+<pre class="programlisting"><a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> <a href="#xmlParseURIRaw">xmlParseURIRaw</a> (const char * str, <br /> int raw)</pre>
<pre class="programlisting">int <a href="#xmlParseURIReference">xmlParseURIReference</a> (<a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> uri, <br /> const char * str)</pre>
<pre class="programlisting">void <a href="#xmlPrintURI">xmlPrintURI</a> (FILE * stream, <br /> <a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> uri)</pre>
<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlSaveUri">xmlSaveUri</a> (<a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> uri)</pre>
@@ -51,7 +52,9 @@ A:link, A:visited, A:active { text-decoration: underline }
</pre><p>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</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>path</tt></i>:</span></td><td>pointer to the path string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or an error code</td></tr></tbody></table></div><h3><a name="xmlParseURI" id="xmlParseURI"></a>Function: xmlParseURI</h3><pre class="programlisting"><a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> xmlParseURI (const char * str)<br />
</pre><p>Parse an URI URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]</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 URI string to analyze</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a newly built <a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlParseURIReference" id="xmlParseURIReference"></a>Function: xmlParseURIReference</h3><pre class="programlisting">int xmlParseURIReference (<a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> uri, <br /> const char * str)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the URI string to analyze</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a newly built <a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlParseURIRaw" id="xmlParseURIRaw"></a>Function: xmlParseURIRaw</h3><pre class="programlisting"><a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> xmlParseURIRaw (const char * str, <br /> int raw)<br />
+</pre><p>Parse an URI but allows to keep intact the original fragments. URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]</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 URI string to analyze</td></tr><tr><td><span class="term"><i><tt>raw</tt></i>:</span></td><td>if 1 unescaping of URI pieces are disabled</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a newly built <a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlParseURIReference" id="xmlParseURIReference"></a>Function: xmlParseURIReference</h3><pre class="programlisting">int xmlParseURIReference (<a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> uri, <br /> const char * str)<br />
</pre><p>Parse an URI <a href="libxml-SAX.html#reference">reference</a> string and fills in the appropriate fields of the @uri structure URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>uri</tt></i>:</span></td><td>pointer to an URI structure</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the string to analyze</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 or the error code</td></tr></tbody></table></div><h3><a name="xmlPrintURI" id="xmlPrintURI"></a>Function: xmlPrintURI</h3><pre class="programlisting">void xmlPrintURI (FILE * stream, <br /> <a href="libxml-uri.html#xmlURIPtr">xmlURIPtr</a> uri)<br />
</pre><p>Prints the URI in the stream @stream.</p>
diff --git a/doc/html/libxml-xmlautomata.html b/doc/html/libxml-xmlautomata.html
index 8a4471e..25ffb00 100644
--- a/doc/html/libxml-xmlautomata.html
+++ b/doc/html/libxml-xmlautomata.html
@@ -26,6 +26,7 @@ The content of this structure is not made public by the API.
<pre class="programlisting">int <a href="#xmlAutomataNewCounter">xmlAutomataNewCounter</a> (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> int min, <br /> int max)</pre>
<pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> <a href="#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a> (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> from, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> to, <br /> int counter)</pre>
<pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> <a href="#xmlAutomataNewEpsilon">xmlAutomataNewEpsilon</a> (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> from, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> to)</pre>
+<pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> <a href="#xmlAutomataNewNegTrans">xmlAutomataNewNegTrans</a> (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> from, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> to, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * token, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * token2, <br /> void * data)</pre>
<pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> <a href="#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a> (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> from, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> to, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * token, <br /> int min, <br /> int max, <br /> void * data)</pre>
<pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> <a href="#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a> (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> from, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> to, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * token, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * token2, <br /> int min, <br /> int max, <br /> void * data)</pre>
<pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> <a href="#xmlAutomataNewState">xmlAutomataNewState</a> (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am)</pre>
@@ -59,7 +60,9 @@ The content of this structure is not made public by the API.
</pre><p>If @to is NULL, this creates first a new target state in the automata and then adds an epsilon transition from the @from state to the target state which will be allowed only if the counter is within the right range.</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>am</tt></i>:</span></td><td>an automata</td></tr><tr><td><span class="term"><i><tt>from</tt></i>:</span></td><td>the starting point of the transition</td></tr><tr><td><span class="term"><i><tt>to</tt></i>:</span></td><td>the target point of the transition or NULL</td></tr><tr><td><span class="term"><i><tt>counter</tt></i>:</span></td><td>the counter associated to that transition</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the target state or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlAutomataNewEpsilon" id="xmlAutomataNewEpsilon"></a>Function: xmlAutomataNewEpsilon</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> xmlAutomataNewEpsilon (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> from, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> to)<br />
</pre><p>If @to is NULL, this creates first a new target state in the automata and then adds an epsilon transition from the @from state to the target state</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>am</tt></i>:</span></td><td>an automata</td></tr><tr><td><span class="term"><i><tt>from</tt></i>:</span></td><td>the starting point of the transition</td></tr><tr><td><span class="term"><i><tt>to</tt></i>:</span></td><td>the target point of the transition or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the target state or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlAutomataNewOnceTrans" id="xmlAutomataNewOnceTrans"></a>Function: xmlAutomataNewOnceTrans</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> xmlAutomataNewOnceTrans (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> from, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> to, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * token, <br /> int min, <br /> int max, <br /> void * data)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>am</tt></i>:</span></td><td>an automata</td></tr><tr><td><span class="term"><i><tt>from</tt></i>:</span></td><td>the starting point of the transition</td></tr><tr><td><span class="term"><i><tt>to</tt></i>:</span></td><td>the target point of the transition or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the target state or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlAutomataNewNegTrans" id="xmlAutomataNewNegTrans"></a>Function: xmlAutomataNewNegTrans</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> xmlAutomataNewNegTrans (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> from, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> to, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * token, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * token2, <br /> void * data)<br />
+</pre><p>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 any value except (@token,@token2) Note that if @token2 is not NULL, then (X, NULL) won't match to follow # the semantic of XSD ##other</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>am</tt></i>:</span></td><td>an automata</td></tr><tr><td><span class="term"><i><tt>from</tt></i>:</span></td><td>the starting point of the transition</td></tr><tr><td><span class="term"><i><tt>to</tt></i>:</span></td><td>the target point of the transition or NULL</td></tr><tr><td><span class="term"><i><tt>token</tt></i>:</span></td><td>the first input string associated to that transition</td></tr><tr><td><span class="term"><i><tt>token2</tt></i>:</span></td><td>the second input string associated to that transition</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>data passed to the callback function if the transition is activated</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the target state or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlAutomataNewOnceTrans" id="xmlAutomataNewOnceTrans"></a>Function: xmlAutomataNewOnceTrans</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> xmlAutomataNewOnceTrans (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> from, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> to, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * token, <br /> int min, <br /> int max, <br /> void * data)<br />
</pre><p>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 whose number is between @min and @max, moreover that transition can only be crossed once.</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>am</tt></i>:</span></td><td>an automata</td></tr><tr><td><span class="term"><i><tt>from</tt></i>:</span></td><td>the starting point of the transition</td></tr><tr><td><span class="term"><i><tt>to</tt></i>:</span></td><td>the target point of the transition or NULL</td></tr><tr><td><span class="term"><i><tt>token</tt></i>:</span></td><td>the input string associated to that transition</td></tr><tr><td><span class="term"><i><tt>min</tt></i>:</span></td><td>the minimum successive occurences of token</td></tr><tr><td><span class="term"><i><tt>max</tt></i>:</span></td><td>the maximum successive occurences of token</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>data associated to the transition</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the target state or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlAutomataNewOnceTrans2" id="xmlAutomataNewOnceTrans2"></a>Function: xmlAutomataNewOnceTrans2</h3><pre class="programlisting"><a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> xmlAutomataNewOnceTrans2 (<a href="libxml-xmlautomata.html#xmlAutomataPtr">xmlAutomataPtr</a> am, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> from, <br /> <a href="libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a> to, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * token, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * token2, <br /> int min, <br /> int max, <br /> void * data)<br />
</pre><p>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 crossed once.</p>
diff --git a/doc/html/libxml-xmlerror.html b/doc/html/libxml-xmlerror.html
index de1188e..fe92d03 100644
--- a/doc/html/libxml-xmlerror.html
+++ b/doc/html/libxml-xmlerror.html
@@ -79,6 +79,7 @@ void <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> (void * userD
<a name="XML_FROM_CHECK" id="XML_FROM_CHECK">XML_FROM_CHECK</a> = 24 : The error checking module
<a name="XML_FROM_WRITER" id="XML_FROM_WRITER">XML_FROM_WRITER</a> = 25 : The xmlwriter module
<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
}
</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
@@ -754,6 +755,7 @@ void <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> (void * userD
<a name="XML_SCHEMAP_AU_PROPS_CORRECT_2" id="XML_SCHEMAP_AU_PROPS_CORRECT_2">XML_SCHEMAP_AU_PROPS_CORRECT_2</a> = 3078 : 3078
<a name="XML_SCHEMAP_A_PROPS_CORRECT_2" id="XML_SCHEMAP_A_PROPS_CORRECT_2">XML_SCHEMAP_A_PROPS_CORRECT_2</a> = 3079 : 3079
<a name="XML_SCHEMAP_C_PROPS_CORRECT" id="XML_SCHEMAP_C_PROPS_CORRECT">XML_SCHEMAP_C_PROPS_CORRECT</a> = 3080 : 3080
+ <a name="XML_SCHEMAP_SRC_REDEFINE" id="XML_SCHEMAP_SRC_REDEFINE">XML_SCHEMAP_SRC_REDEFINE</a> = 3081 : 3081
<a name="XML_MODULE_OPEN" id="XML_MODULE_OPEN">XML_MODULE_OPEN</a> = 4900 : 4900
<a name="XML_MODULE_CLOSE" id="XML_MODULE_CLOSE">XML_MODULE_CLOSE</a> = 4901 : 4901
<a name="XML_CHECK_FOUND_ELEMENT" id="XML_CHECK_FOUND_ELEMENT">XML_CHECK_FOUND_ELEMENT</a> = 5000
@@ -794,8 +796,13 @@ void <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> (void * userD
<a name="XML_CHECK_OUTSIDE_DICT" id="XML_CHECK_OUTSIDE_DICT">XML_CHECK_OUTSIDE_DICT</a> = 5035 : 5035
<a name="XML_CHECK_WRONG_NAME" id="XML_CHECK_WRONG_NAME">XML_CHECK_WRONG_NAME</a> = 5036 : 5036
<a name="XML_CHECK_NAME_NOT_NULL" id="XML_CHECK_NAME_NOT_NULL">XML_CHECK_NAME_NOT_NULL</a> = 5037 : 5037
- <a name="XML_CHECK_" id="XML_CHECK_">XML_CHECK_</a> = 5038 : 5033
- <a name="XML_CHECK_X" id="XML_CHECK_X">XML_CHECK_X</a> = 5039 : 503
+ <a name="XML_I18N_NO_NAME" id="XML_I18N_NO_NAME">XML_I18N_NO_NAME</a> = 6000
+ <a name="XML_I18N_NO_HANDLER" id="XML_I18N_NO_HANDLER">XML_I18N_NO_HANDLER</a> = 6001 : 6001
+ <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
}
</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>
diff --git a/doc/html/libxml-xmlexports.html b/doc/html/libxml-xmlexports.html
index dfce7b2..5b4e8b8 100644
--- a/doc/html/libxml-xmlexports.html
+++ b/doc/html/libxml-xmlexports.html
@@ -10,9 +10,10 @@ 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 xmlexports 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 xmlexports 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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-xmlerror.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlerror.html">xmlerror</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-xmlmemory.html">xmlmemory</a></th><td><a accesskey="n" href="libxml-xmlmemory.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>macros for marking symbols as exportable/importable. </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#LIBXML_DLL_IMPORT">LIBXML_DLL_IMPORT</a></pre><pre class="programlisting">#define <a href="#XMLCALL">XMLCALL</a></pre><pre class="programlisting">#define <a href="#XMLPUBFUN">XMLPUBFUN</a></pre><pre class="programlisting">#define <a href="#XMLPUBVAR">XMLPUBVAR</a></pre><pre class="programlisting">#define <a href="#_REENTRANT">_REENTRANT</a></pre><h2>Description</h2>
+ </style><title>Module xmlexports 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 xmlexports 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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-xmlerror.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlerror.html">xmlerror</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-xmlmemory.html">xmlmemory</a></th><td><a accesskey="n" href="libxml-xmlmemory.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>macros for marking symbols as exportable/importable. </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#LIBXML_DLL_IMPORT">LIBXML_DLL_IMPORT</a></pre><pre class="programlisting">#define <a href="#XMLCALL">XMLCALL</a></pre><pre class="programlisting">#define <a href="#XMLCDECL">XMLCDECL</a></pre><pre class="programlisting">#define <a href="#XMLPUBFUN">XMLPUBFUN</a></pre><pre class="programlisting">#define <a href="#XMLPUBVAR">XMLPUBVAR</a></pre><pre class="programlisting">#define <a href="#_REENTRANT">_REENTRANT</a></pre><h2>Description</h2>
<h3><a name="LIBXML_DLL_IMPORT" id="LIBXML_DLL_IMPORT"></a>Macro: LIBXML_DLL_IMPORT</h3><pre>#define LIBXML_DLL_IMPORT</pre><p></p>
<h3><a name="XMLCALL" id="XMLCALL"></a>Macro: XMLCALL</h3><pre>#define XMLCALL</pre><p></p>
+<h3><a name="XMLCDECL" id="XMLCDECL"></a>Macro: XMLCDECL</h3><pre>#define XMLCDECL</pre><p></p>
<h3><a name="XMLPUBFUN" id="XMLPUBFUN"></a>Macro: XMLPUBFUN</h3><pre>#define XMLPUBFUN</pre><p></p>
<h3><a name="XMLPUBVAR" id="XMLPUBVAR"></a>Macro: XMLPUBVAR</h3><pre>#define XMLPUBVAR</pre><p></p>
<h3><a name="_REENTRANT" id="_REENTRANT"></a>Macro: _REENTRANT</h3><pre>#define _REENTRANT</pre><p></p>
diff --git a/doc/html/libxml-xmlregexp.html b/doc/html/libxml-xmlregexp.html
index 4b6d888..761e105 100644
--- a/doc/html/libxml-xmlregexp.html
+++ b/doc/html/libxml-xmlregexp.html
@@ -10,13 +10,39 @@ 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 xmlregexp 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 xmlregexp 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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-xmlreader.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlreader.html">xmlreader</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-xmlsave.html">xmlsave</a></th><td><a accesskey="n" href="libxml-xmlsave.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>basic API for libxml regular expressions handling used for XML Schemas and validation. </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlRegExecCtxt">xmlRegExecCtxt</a><br />struct _xmlRegExecCtxt
+ </style><title>Module xmlregexp 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 xmlregexp 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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-xmlreader.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlreader.html">xmlreader</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-xmlsave.html">xmlsave</a></th><td><a accesskey="n" href="libxml-xmlsave.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>basic API for libxml regular expressions handling used for XML Schemas and validation. </p><h2>Table of Contents</h2><pre class="programlisting">Structure <a href="#xmlExpCtxt">xmlExpCtxt</a><br />struct _xmlExpCtxt
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlregexp.html#xmlExpCtxt">xmlExpCtxt</a> * <a name="xmlExpCtxtPtr" id="xmlExpCtxtPtr">xmlExpCtxtPtr</a>
+</pre><pre class="programlisting">Structure <a href="#xmlExpNode">xmlExpNode</a><br />struct _xmlExpNode
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-xmlregexp.html#xmlExpNode">xmlExpNode</a> * <a name="xmlExpNodePtr" id="xmlExpNodePtr">xmlExpNodePtr</a>
+</pre><pre class="programlisting">Enum <a href="#xmlExpNodeType">xmlExpNodeType</a>
+</pre><pre class="programlisting">Structure <a href="#xmlRegExecCtxt">xmlRegExecCtxt</a><br />struct _xmlRegExecCtxt
The content of this structure is not made public by the API.
</pre><pre class="programlisting">Typedef <a href="libxml-xmlregexp.html#xmlRegExecCtxt">xmlRegExecCtxt</a> * <a name="xmlRegExecCtxtPtr" id="xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a>
</pre><pre class="programlisting">Structure <a href="#xmlRegexp">xmlRegexp</a><br />struct _xmlRegexp
The content of this structure is not made public by the API.
</pre><pre class="programlisting">Typedef <a href="libxml-xmlregexp.html#xmlRegexp">xmlRegexp</a> * <a name="xmlRegexpPtr" id="xmlRegexpPtr">xmlRegexpPtr</a>
-</pre><pre class="programlisting">Function type: <a href="#xmlRegExecCallbacks">xmlRegExecCallbacks</a>
+</pre><pre class="programlisting">int <a href="#xmlExpCtxtNbCons">xmlExpCtxtNbCons</a> (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlExpCtxtNbNodes">xmlExpCtxtNbNodes</a> (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">void <a href="#xmlExpDump">xmlExpDump</a> (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> expr)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> <a href="#xmlExpExpDerive">xmlExpExpDerive</a> (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> sub)</pre>
+<pre class="programlisting">void <a href="#xmlExpFree">xmlExpFree</a> (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp)</pre>
+<pre class="programlisting">void <a href="#xmlExpFreeCtxt">xmlExpFreeCtxt</a> (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt)</pre>
+<pre class="programlisting">int <a href="#xmlExpGetLanguage">xmlExpGetLanguage</a> (<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> ** list, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlExpGetStart">xmlExpGetStart</a> (<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> ** list, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlExpIsNillable">xmlExpIsNillable</a> (<a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp)</pre>
+<pre class="programlisting">int <a href="#xmlExpMaxToken">xmlExpMaxToken</a> (<a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> expr)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> <a href="#xmlExpNewAtom">xmlExpNewAtom</a> (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br /> int len)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> <a href="#xmlExpNewCtxt">xmlExpNewCtxt</a> (int maxNodes, <br /> <a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> <a href="#xmlExpNewOr">xmlExpNewOr</a> (<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)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> <a href="#xmlExpNewRange">xmlExpNewRange</a> (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> subset, <br /> int min, <br /> int max)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> <a href="#xmlExpNewSeq">xmlExpNewSeq</a> (<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)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> <a href="#xmlExpParse">xmlExpParse</a> (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br /> const char * expr)</pre>
+<pre class="programlisting">void <a href="#xmlExpRef">xmlExpRef</a> (<a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> <a href="#xmlExpStringDerive">xmlExpStringDerive</a> (<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> * str, <br /> int len)</pre>
+<pre class="programlisting">int <a href="#xmlExpSubsume">xmlExpSubsume</a> (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> sub)</pre>
+<pre class="programlisting">Function type: <a href="#xmlRegExecCallbacks">xmlRegExecCallbacks</a>
void <a href="#xmlRegExecCallbacks">xmlRegExecCallbacks</a> (<a href="libxml-xmlregexp.html#xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a> exec, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * token, <br /> void * transdata, <br /> void * inputdata)
</pre>
<pre class="programlisting">int <a href="#xmlRegExecErrInfo">xmlRegExecErrInfo</a> (<a href="libxml-xmlregexp.html#xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a> exec, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** string, <br /> int * nbval, <br /> int * nbneg, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** values, <br /> int * terminal)</pre>
@@ -31,11 +57,61 @@ void <a href="#xmlRegExecCallbacks">xmlRegExecCallbacks</a> (<a href="libxml-xm
<pre class="programlisting">int <a href="#xmlRegexpIsDeterminist">xmlRegexpIsDeterminist</a> (<a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> comp)</pre>
<pre class="programlisting">void <a href="#xmlRegexpPrint">xmlRegexpPrint</a> (FILE * output, <br /> <a href="libxml-xmlregexp.html#xmlRegexpPtr">xmlRegexpPtr</a> regexp)</pre>
<h2>Description</h2>
-<h3><a name="xmlRegExecCtxt" id="xmlRegExecCtxt">Structure xmlRegExecCtxt</a></h3><pre class="programlisting">Structure xmlRegExecCtxt<br />struct _xmlRegExecCtxt {
+<h3><a name="xmlExpCtxt" id="xmlExpCtxt">Structure xmlExpCtxt</a></h3><pre class="programlisting">Structure xmlExpCtxt<br />struct _xmlExpCtxt {
+The content of this structure is not made public by the API.
+}</pre><h3><a name="xmlExpNode" id="xmlExpNode">Structure xmlExpNode</a></h3><pre class="programlisting">Structure xmlExpNode<br />struct _xmlExpNode {
+The content of this structure is not made public by the API.
+}</pre><h3>Enum <a name="xmlExpNodeType" id="xmlExpNodeType">xmlExpNodeType</a></h3><pre class="programlisting">Enum xmlExpNodeType {
+ <a name="XML_EXP_EMPTY" id="XML_EXP_EMPTY">XML_EXP_EMPTY</a> = 0
+ <a name="XML_EXP_FORBID" id="XML_EXP_FORBID">XML_EXP_FORBID</a> = 1
+ <a name="XML_EXP_ATOM" id="XML_EXP_ATOM">XML_EXP_ATOM</a> = 2
+ <a name="XML_EXP_SEQ" id="XML_EXP_SEQ">XML_EXP_SEQ</a> = 3
+ <a name="XML_EXP_OR" id="XML_EXP_OR">XML_EXP_OR</a> = 4
+ <a name="XML_EXP_COUNT" id="XML_EXP_COUNT">XML_EXP_COUNT</a> = 5
+}
+</pre><h3><a name="xmlRegExecCtxt" id="xmlRegExecCtxt">Structure xmlRegExecCtxt</a></h3><pre class="programlisting">Structure xmlRegExecCtxt<br />struct _xmlRegExecCtxt {
The content of this structure is not made public by the API.
}</pre><h3><a name="xmlRegexp" id="xmlRegexp">Structure xmlRegexp</a></h3><pre class="programlisting">Structure xmlRegexp<br />struct _xmlRegexp {
The content of this structure is not made public by the API.
-}</pre><h3><a name="xmlRegExecCallbacks" id="xmlRegExecCallbacks"></a>Function type: xmlRegExecCallbacks</h3><pre class="programlisting">Function type: xmlRegExecCallbacks
+}</pre><h3><a name="xmlExpCtxtNbCons" id="xmlExpCtxtNbCons"></a>Function: xmlExpCtxtNbCons</h3><pre class="programlisting">int xmlExpCtxtNbCons (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt)<br />
+</pre><p>Debugging facility provides the number of allocated nodes over lifetime</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><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of nodes ever allocated or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlExpCtxtNbNodes" id="xmlExpCtxtNbNodes"></a>Function: xmlExpCtxtNbNodes</h3><pre class="programlisting">int xmlExpCtxtNbNodes (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt)<br />
+</pre><p>Debugging facility provides the number of allocated nodes at a that point</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><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of nodes in use or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlExpDump" id="xmlExpDump"></a>Function: xmlExpDump</h3><pre class="programlisting">void xmlExpDump (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> expr)<br />
+</pre><p>Serialize the expression as compiled to the 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>a buffer to receive the output</td></tr><tr><td><span class="term"><i><tt>expr</tt></i>:</span></td><td>the compiled expression</td></tr></tbody></table></div><h3><a name="xmlExpExpDerive" id="xmlExpExpDerive"></a>Function: xmlExpExpDerive</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> xmlExpExpDerive (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> sub)<br />
+</pre><p>Evaluates the expression resulting from @exp consuming a sub expression @sub Based on algebraic derivation and sometimes direct Brzozowski derivation it usually tatkes less than linear time and can handle expressions generating infinite languages.</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 expressions context</td></tr><tr><td><span class="term"><i><tt>exp</tt></i>:</span></td><td>the englobing expression</td></tr><tr><td><span class="term"><i><tt>sub</tt></i>:</span></td><td>the subexpression</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting expression or NULL in case of internal error, the result must be freed</td></tr></tbody></table></div><h3><a name="xmlExpFree" id="xmlExpFree"></a>Function: xmlExpFree</h3><pre class="programlisting">void xmlExpFree (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp)<br />
+</pre><p>Dereference the expression</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></tbody></table></div><h3><a name="xmlExpFreeCtxt" id="xmlExpFreeCtxt"></a>Function: xmlExpFreeCtxt</h3><pre class="programlisting">void xmlExpFreeCtxt (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt)<br />
+</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> ** list, <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>list</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> ** list, <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>list</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 />
+</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 />
+</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>
+<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>left</tt></i>:</span></td><td>left expression</td></tr><tr><td><span class="term"><i><tt>right</tt></i>:</span></td><td>right expression</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="xmlExpNewRange" id="xmlExpNewRange"></a>Function: xmlExpNewRange</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> xmlExpNewRange (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> subset, <br /> int min, <br /> int max)<br />
+</pre><p>Get the atom associated to the range (@subset){@min, @max} Note that @subset is consumed in the operation, to keep an handle on it use xmlExpRef() and use xmlExpFree() to release it, this is true even in case of failure (unless ctxt == NULL).</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>subset</tt></i>:</span></td><td>the expression to be repeated</td></tr><tr><td><span class="term"><i><tt>min</tt></i>:</span></td><td>the lower bound for the repetition</td></tr><tr><td><span class="term"><i><tt>max</tt></i>:</span></td><td>the upper bound for the repetition, -1 means infinite</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="xmlExpNewSeq" id="xmlExpNewSeq"></a>Function: xmlExpNewSeq</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> xmlExpNewSeq (<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 sequence @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>
+<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>left</tt></i>:</span></td><td>left expression</td></tr><tr><td><span class="term"><i><tt>right</tt></i>:</span></td><td>right expression</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="xmlExpParse" id="xmlExpParse"></a>Function: xmlExpParse</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> xmlExpParse (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br /> const char * expr)<br />
+</pre><p>Minimal parser for regexps, it understand the following constructs - string terminals - choice operator | - sequence operator , - subexpressions (...) - usual cardinality operators + * and ? - finite sequences { min, max } - infinite sequences { min, * } There is minimal checkings made especially no checking on strings values</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 expressions context</td></tr><tr><td><span class="term"><i><tt>expr</tt></i>:</span></td><td>the 0 terminated string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new expression or NULL in case of failure</td></tr></tbody></table></div><h3><a name="xmlExpRef" id="xmlExpRef"></a>Function: xmlExpRef</h3><pre class="programlisting">void xmlExpRef (<a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp)<br />
+</pre><p>Increase the <a href="libxml-SAX.html#reference">reference</a> count of the expression</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></tbody></table></div><h3><a name="xmlExpStringDerive" id="xmlExpStringDerive"></a>Function: xmlExpStringDerive</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> xmlExpStringDerive (<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> * str, <br /> int len)<br />
+</pre><p>Do one step of Brzozowski derivation of the expression @exp with respect to the input string</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>str</tt></i>:</span></td><td>the string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the string len in bytes if available</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the resulting expression or NULL in case of internal error</td></tr></tbody></table></div><h3><a name="xmlExpSubsume" id="xmlExpSubsume"></a>Function: xmlExpSubsume</h3><pre class="programlisting">int xmlExpSubsume (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp, <br /> <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> sub)<br />
+</pre><p>Check whether @exp accepts all the languages accexpted by @sub the input being a subexpression.</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 expressions context</td></tr><tr><td><span class="term"><i><tt>exp</tt></i>:</span></td><td>the englobing expression</td></tr><tr><td><span class="term"><i><tt>sub</tt></i>:</span></td><td>the subexpression</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if true 0 if false and -1 in case of failure.</td></tr></tbody></table></div><h3><a name="xmlRegExecCallbacks" id="xmlRegExecCallbacks"></a>Function type: xmlRegExecCallbacks</h3><pre class="programlisting">Function type: xmlRegExecCallbacks
void xmlRegExecCallbacks (<a href="libxml-xmlregexp.html#xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a> exec, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * token, <br /> void * transdata, <br /> void * inputdata)
</pre><p></p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>exec</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>token</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>transdata</tt></i>:</span></td><td></td></tr><tr><td><span class="term"><i><tt>inputdata</tt></i>:</span></td><td></td></tr></tbody></table></div><br />
<h3><a name="xmlRegExecErrInfo" id="xmlRegExecErrInfo"></a>Function: xmlRegExecErrInfo</h3><pre class="programlisting">int xmlRegExecErrInfo (<a href="libxml-xmlregexp.html#xmlRegExecCtxtPtr">xmlRegExecCtxtPtr</a> exec, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** string, <br /> int * nbval, <br /> int * nbneg, <br /> <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** values, <br /> int * terminal)<br />
diff --git a/doc/html/libxml-xmlsave.html b/doc/html/libxml-xmlsave.html
index b1db142..ef54e58 100644
--- a/doc/html/libxml-xmlsave.html
+++ b/doc/html/libxml-xmlsave.html
@@ -28,6 +28,7 @@ The content of this structure is not made public by the API.
The content of this structure is not made public by the API.
}</pre><h3>Enum <a name="xmlSaveOption" id="xmlSaveOption">xmlSaveOption</a></h3><pre class="programlisting">Enum xmlSaveOption {
<a name="XML_SAVE_FORMAT" id="XML_SAVE_FORMAT">XML_SAVE_FORMAT</a> = 1 : format save output
+ <a name="XML_SAVE_NO_DECL" id="XML_SAVE_NO_DECL">XML_SAVE_NO_DECL</a> = 2 : drop the xml declaration
}
</pre><h3><a name="xmlSaveClose" id="xmlSaveClose"></a>Function: xmlSaveClose</h3><pre class="programlisting">int xmlSaveClose (<a href="libxml-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt)<br />
</pre><p>Close a document saving context, i.e. make sure that all bytes have been output and free the associated data.</p>
diff --git a/doc/html/libxml-xmlschemas.html b/doc/html/libxml-xmlschemas.html
index 201b09b..1277171 100644
--- a/doc/html/libxml-xmlschemas.html
+++ b/doc/html/libxml-xmlschemas.html
@@ -40,6 +40,7 @@ The content of this structure is not made public by the API.
<pre class="programlisting">void <a href="#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a> (<a href="libxml-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlschemas.html#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a> err, <br /> <a href="libxml-xmlschemas.html#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a> warn, <br /> void * ctx)</pre>
<pre class="programlisting">void <a href="#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a> (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlschemas.html#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a> err, <br /> <a href="libxml-xmlschemas.html#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a> warn, <br /> void * ctx)</pre>
<pre class="programlisting">int <a href="#xmlSchemaSetValidOptions">xmlSchemaSetValidOptions</a> (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br /> int options)</pre>
+<pre class="programlisting">void <a href="#xmlSchemaSetValidStructuredErrors">xmlSchemaSetValidStructuredErrors</a> (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> serror, <br /> void * ctx)</pre>
<pre class="programlisting">int <a href="#xmlSchemaValidCtxtGetOptions">xmlSchemaValidCtxtGetOptions</a> (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt)</pre>
<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>
@@ -145,7 +146,9 @@ The content of this structure is not made public by the API.
</pre><p>Set the error and warning callback informations</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>err</tt></i>:</span></td><td>the error function</td></tr><tr><td><span class="term"><i><tt>warn</tt></i>:</span></td><td>the warning function</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the functions context</td></tr></tbody></table></div><h3><a name="xmlSchemaSetValidOptions" id="xmlSchemaSetValidOptions"></a>Function: xmlSchemaSetValidOptions</h3><pre class="programlisting">int xmlSchemaSetValidOptions (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br /> int options)<br />
</pre><p>Sets the options to be used during the validation.</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>options</tt></i>:</span></td><td>a combination of <a href="libxml-xmlschemas.html#xmlSchemaValidOption">xmlSchemaValidOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of an API error.</td></tr></tbody></table></div><h3><a name="xmlSchemaValidCtxtGetOptions" id="xmlSchemaValidCtxtGetOptions"></a>Function: xmlSchemaValidCtxtGetOptions</h3><pre class="programlisting">int xmlSchemaValidCtxtGetOptions (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt)<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>options</tt></i>:</span></td><td>a combination of <a href="libxml-xmlschemas.html#xmlSchemaValidOption">xmlSchemaValidOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of an API error.</td></tr></tbody></table></div><h3><a name="xmlSchemaSetValidStructuredErrors" id="xmlSchemaSetValidStructuredErrors"></a>Function: xmlSchemaSetValidStructuredErrors</h3><pre class="programlisting">void xmlSchemaSetValidStructuredErrors (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br /> <a href="libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> serror, <br /> void * ctx)<br />
+</pre><p>Set the structured error callback</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>serror</tt></i>:</span></td><td>the structured error function</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the functions context</td></tr></tbody></table></div><h3><a name="xmlSchemaValidCtxtGetOptions" id="xmlSchemaValidCtxtGetOptions"></a>Function: xmlSchemaValidCtxtGetOptions</h3><pre class="programlisting">int xmlSchemaValidCtxtGetOptions (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt)<br />
</pre><p>Get the validation context options.</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>Returns</tt></i>:</span></td><td>the option combination or -1 on error.</td></tr></tbody></table></div><h3><a name="xmlSchemaValidateDoc" id="xmlSchemaValidateDoc"></a>Function: xmlSchemaValidateDoc</h3><pre class="programlisting">int xmlSchemaValidateDoc (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
</pre><p>Validate a document tree in memory.</p>
diff --git a/doc/html/libxml-xmlversion.html b/doc/html/libxml-xmlversion.html
index bdf760c..32609a0 100644
--- a/doc/html/libxml-xmlversion.html
+++ b/doc/html/libxml-xmlversion.html
@@ -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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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_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_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_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_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_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="#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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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_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_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_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="#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>
@@ -21,6 +21,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<h3><a name="LIBXML_DEBUG_RUNTIME" id="LIBXML_DEBUG_RUNTIME"></a>Macro: LIBXML_DEBUG_RUNTIME</h3><pre>#define LIBXML_DEBUG_RUNTIME</pre><p>Whether the runtime debugging is configured in</p>
<h3><a name="LIBXML_DOCB_ENABLED" id="LIBXML_DOCB_ENABLED"></a>Macro: LIBXML_DOCB_ENABLED</h3><pre>#define LIBXML_DOCB_ENABLED</pre><p>Whether the SGML Docbook support is configured in</p>
<h3><a name="LIBXML_DOTTED_VERSION" id="LIBXML_DOTTED_VERSION"></a>Macro: LIBXML_DOTTED_VERSION</h3><pre>#define LIBXML_DOTTED_VERSION</pre><p>the version string like "1.2.3"</p>
+<h3><a name="LIBXML_EXPR_ENABLED" id="LIBXML_EXPR_ENABLED"></a>Macro: LIBXML_EXPR_ENABLED</h3><pre>#define LIBXML_EXPR_ENABLED</pre><p>Whether the formal expressions interfaces are compiled in</p>
<h3><a name="LIBXML_FTP_ENABLED" id="LIBXML_FTP_ENABLED"></a>Macro: LIBXML_FTP_ENABLED</h3><pre>#define LIBXML_FTP_ENABLED</pre><p>Whether the FTP support is configured in</p>
<h3><a name="LIBXML_HTML_ENABLED" id="LIBXML_HTML_ENABLED"></a>Macro: LIBXML_HTML_ENABLED</h3><pre>#define LIBXML_HTML_ENABLED</pre><p>Whether the HTML support is configured in</p>
<h3><a name="LIBXML_HTTP_ENABLED" id="LIBXML_HTTP_ENABLED"></a>Macro: LIBXML_HTTP_ENABLED</h3><pre>#define LIBXML_HTTP_ENABLED</pre><p>Whether the HTTP support is configured in</p>
@@ -28,7 +29,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<h3><a name="LIBXML_ISO8859X_ENABLED" id="LIBXML_ISO8859X_ENABLED"></a>Macro: LIBXML_ISO8859X_ENABLED</h3><pre>#define LIBXML_ISO8859X_ENABLED</pre><p>Whether ISO-8859-* support is made available in case iconv is not</p>
<h3><a name="LIBXML_LEGACY_ENABLED" id="LIBXML_LEGACY_ENABLED"></a>Macro: LIBXML_LEGACY_ENABLED</h3><pre>#define LIBXML_LEGACY_ENABLED</pre><p>Whether the deprecated APIs are compiled in for compatibility</p>
<h3><a name="LIBXML_MODULES_ENABLED" id="LIBXML_MODULES_ENABLED"></a>Macro: LIBXML_MODULES_ENABLED</h3><pre>#define LIBXML_MODULES_ENABLED</pre><p>Whether the module interfaces are compiled in</p>
-<h3><a name="LIBXML_MODULE_EXTENSION" id="LIBXML_MODULE_EXTENSION"></a>Macro: LIBXML_MODULE_EXTENSION</h3><pre>#define LIBXML_MODULE_EXTENSION</pre><p></p>
+<h3><a name="LIBXML_MODULE_EXTENSION" id="LIBXML_MODULE_EXTENSION"></a>Macro: LIBXML_MODULE_EXTENSION</h3><pre>#define LIBXML_MODULE_EXTENSION</pre><p>the string suffix used by dynamic modules (usually shared libraries)</p>
<h3><a name="LIBXML_OUTPUT_ENABLED" id="LIBXML_OUTPUT_ENABLED"></a>Macro: LIBXML_OUTPUT_ENABLED</h3><pre>#define LIBXML_OUTPUT_ENABLED</pre><p>Whether the serialization/saving support is configured in</p>
<h3><a name="LIBXML_PATTERN_ENABLED" id="LIBXML_PATTERN_ENABLED"></a>Macro: LIBXML_PATTERN_ENABLED</h3><pre>#define LIBXML_PATTERN_ENABLED</pre><p>Whether the <a href="libxml-pattern.html#xmlPattern">xmlPattern</a> node selection interface is configured in</p>
<h3><a name="LIBXML_PUSH_ENABLED" id="LIBXML_PUSH_ENABLED"></a>Macro: LIBXML_PUSH_ENABLED</h3><pre>#define LIBXML_PUSH_ENABLED</pre><p>Whether the push parsing interfaces are configured in</p>
@@ -36,6 +37,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<h3><a name="LIBXML_REGEXP_ENABLED" id="LIBXML_REGEXP_ENABLED"></a>Macro: LIBXML_REGEXP_ENABLED</h3><pre>#define LIBXML_REGEXP_ENABLED</pre><p>Whether the regular expressions interfaces are compiled in</p>
<h3><a name="LIBXML_SAX1_ENABLED" id="LIBXML_SAX1_ENABLED"></a>Macro: LIBXML_SAX1_ENABLED</h3><pre>#define LIBXML_SAX1_ENABLED</pre><p>Whether the older SAX1 interface is configured in</p>
<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_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>
diff --git a/doc/html/libxml-xpath.html b/doc/html/libxml-xpath.html
index 30fdc22..ba4265f 100644
--- a/doc/html/libxml-xpath.html
+++ b/doc/html/libxml-xpath.html
@@ -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 xpath 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 xpath 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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-xmlwriter.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlwriter.html">xmlwriter</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-xpathInternals.html">xpathInternals</a></th><td><a accesskey="n" href="libxml-xpathInternals.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>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</p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#xmlXPathNodeSetGetLength">xmlXPathNodeSetGetLength</a></pre><pre class="programlisting">#define <a href="#xmlXPathNodeSetIsEmpty">xmlXPathNodeSetIsEmpty</a></pre><pre class="programlisting">#define <a href="#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a></pre><pre class="programlisting">Structure <a href="#xmlNodeSet">xmlNodeSet</a><br />struct _xmlNodeSet
+ </style><title>Module xpath 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 xpath 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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</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://rubyforge.org/projects/xml-tools/">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-xmlwriter.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlwriter.html">xmlwriter</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-xpathInternals.html">xpathInternals</a></th><td><a accesskey="n" href="libxml-xpathInternals.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>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</p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#XML_XPATH_CHECKNS">XML_XPATH_CHECKNS</a></pre><pre class="programlisting">#define <a href="#XML_XPATH_NOVAR">XML_XPATH_NOVAR</a></pre><pre class="programlisting">#define <a href="#xmlXPathNodeSetGetLength">xmlXPathNodeSetGetLength</a></pre><pre class="programlisting">#define <a href="#xmlXPathNodeSetIsEmpty">xmlXPathNodeSetIsEmpty</a></pre><pre class="programlisting">#define <a href="#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a></pre><pre class="programlisting">Structure <a href="#xmlNodeSet">xmlNodeSet</a><br />struct _xmlNodeSet
</pre><pre class="programlisting">Typedef <a href="libxml-xpath.html#xmlNodeSet">xmlNodeSet</a> * <a name="xmlNodeSetPtr" id="xmlNodeSetPtr">xmlNodeSetPtr</a>
</pre><pre class="programlisting">Structure <a href="#xmlXPathAxis">xmlXPathAxis</a><br />struct _xmlXPathAxis
</pre><pre class="programlisting">Typedef <a href="libxml-xpath.html#xmlXPathAxis">xmlXPathAxis</a> * <a name="xmlXPathAxisPtr" id="xmlXPathAxisPtr">xmlXPathAxisPtr</a>
@@ -86,6 +86,8 @@ void <a href="#xmlXPathFunction">xmlXPathFunction</a> (<a href="libxml-xpath.ht
<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>
<h2>Description</h2>
+<h3><a name="XML_XPATH_CHECKNS" id="XML_XPATH_CHECKNS"></a>Macro: XML_XPATH_CHECKNS</h3><pre>#define XML_XPATH_CHECKNS</pre><p>check namespaces at compilation</p>
+<h3><a name="XML_XPATH_NOVAR" id="XML_XPATH_NOVAR"></a>Macro: XML_XPATH_NOVAR</h3><pre>#define XML_XPATH_NOVAR</pre><p>forbid variables in expression</p>
<h3><a name="xmlXPathNodeSetGetLength" id="xmlXPathNodeSetGetLength"></a>Macro: xmlXPathNodeSetGetLength</h3><pre>#define xmlXPathNodeSetGetLength</pre><p>Implement a functionality similar to the DOM NodeList.length. Returns the number of nodes in the node-set.</p>
<h3><a name="xmlXPathNodeSetIsEmpty" id="xmlXPathNodeSetIsEmpty"></a>Macro: xmlXPathNodeSetIsEmpty</h3><pre>#define xmlXPathNodeSetIsEmpty</pre><p>Checks whether @ns is empty or not. Returns %TRUE if @ns is an empty node-set.</p>
<h3><a name="xmlXPathNodeSetItem" id="xmlXPathNodeSetItem"></a>Macro: xmlXPathNodeSetItem</h3><pre>#define xmlXPathNodeSetItem</pre><p>Implements a functionality similar to the DOM NodeList.item(). Returns the <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> at the given @index in @ns or NULL if @index is out of range (0 to length-1)</p>
@@ -136,6 +138,7 @@ The content of this structure is not made public by the API.
<a href="libxml-xmlerror.html#xmlError">xmlError</a> lastError : the last error
<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> debugNode : the source node XSLT dictionnary
<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict : dictionnary if any
+ int flags : flags to control compilation
}</pre><h3>Enum <a name="xmlXPathError" id="xmlXPathError">xmlXPathError</a></h3><pre class="programlisting">Enum xmlXPathError {
<a name="XPATH_EXPRESSION_OK" id="XPATH_EXPRESSION_OK">XPATH_EXPRESSION_OK</a> = 0
<a name="XPATH_NUMBER_ERROR" id="XPATH_NUMBER_ERROR">XPATH_NUMBER_ERROR</a> = 1
diff --git a/doc/index.html b/doc/index.html
index 69e54ad..e5cdd04 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -1,8 +1,7 @@
<?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" />
+ <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}
diff --git a/doc/libxml2-api.xml b/doc/libxml2-api.xml
index d100603..26263a5 100644
--- a/doc/libxml2-api.xml
+++ b/doc/libxml2-api.xml
@@ -35,11 +35,13 @@
<exports symbol='HTML_INVALID' type='enum'/>
<exports symbol='HTML_PARSE_NONET' type='enum'/>
<exports symbol='HTML_NA' type='enum'/>
+ <exports symbol='HTML_PARSE_COMPACT' type='enum'/>
<exports symbol='HTML_VALID' type='enum'/>
- <exports symbol='HTML_PARSE_NOBLANKS' type='enum'/>
<exports symbol='HTML_PARSE_NOERROR' type='enum'/>
+ <exports symbol='HTML_PARSE_NOBLANKS' type='enum'/>
<exports symbol='HTML_DEPRECATED' type='enum'/>
<exports symbol='HTML_PARSE_PEDANTIC' type='enum'/>
+ <exports symbol='HTML_PARSE_RECOVER' type='enum'/>
<exports symbol='HTML_PARSE_NOWARNING' type='enum'/>
<exports symbol='htmlParserNodeInfo' type='typedef'/>
<exports symbol='htmlParserInput' type='typedef'/>
@@ -661,51 +663,84 @@
<exports symbol='XML_SAX2_MAGIC' type='macro'/>
<exports symbol='XML_DETECT_IDS' type='macro'/>
<exports symbol='XML_DEFAULT_VERSION' type='macro'/>
- <exports symbol='XML_PARSER_ENTITY_DECL' type='enum'/>
+ <exports symbol='XML_FEATURE_SCHEMAS' type='enum'/>
+ <exports symbol='XML_FEATURE_TREE' type='enum'/>
<exports symbol='XML_PARSER_CONTENT' type='enum'/>
+ <exports symbol='XML_FEATURE_XINCLUDE' type='enum'/>
<exports symbol='XML_PARSE_NOBLANKS' type='enum'/>
- <exports symbol='XML_PARSE_NODICT' type='enum'/>
- <exports symbol='XML_PARSER_SYSTEM_LITERAL' type='enum'/>
+ <exports symbol='XML_FEATURE_OUTPUT' type='enum'/>
+ <exports symbol='XML_FEATURE_PUSH' type='enum'/>
+ <exports symbol='XML_FEATURE_FTP' type='enum'/>
<exports symbol='XML_PARSER_PI' type='enum'/>
- <exports symbol='XML_PARSE_PUSH_DOM' type='enum'/>
+ <exports symbol='XML_FEATURE_EXPR' type='enum'/>
+ <exports symbol='XML_FEATURE_UNICODE' type='enum'/>
+ <exports symbol='XML_FEATURE_WRITER' type='enum'/>
+ <exports symbol='XML_PARSER_ENTITY_DECL' type='enum'/>
<exports symbol='XML_PARSER_PROLOG' type='enum'/>
- <exports symbol='XML_PARSE_NONET' type='enum'/>
- <exports symbol='XML_PARSER_EPILOG' type='enum'/>
+ <exports symbol='XML_PARSER_MISC' type='enum'/>
+ <exports symbol='XML_FEATURE_C14N' type='enum'/>
<exports symbol='XML_PARSER_END_TAG' type='enum'/>
<exports symbol='XML_PARSE_DTDVALID' type='enum'/>
- <exports symbol='XML_PARSE_DOM' type='enum'/>
- <exports symbol='XML_PARSER_ATTRIBUTE_VALUE' type='enum'/>
+ <exports symbol='XML_FEATURE_DEBUG_MEM' type='enum'/>
+ <exports symbol='XML_PARSE_READER' type='enum'/>
+ <exports symbol='XML_FEATURE_THREAD' type='enum'/>
+ <exports symbol='XML_FEATURE_SAX1' type='enum'/>
<exports symbol='XML_PARSE_PUSH_SAX' type='enum'/>
<exports symbol='XML_PARSE_RECOVER' type='enum'/>
+ <exports symbol='XML_FEATURE_ICONV' type='enum'/>
+ <exports symbol='XML_FEATURE_READER' type='enum'/>
+ <exports symbol='XML_PARSE_NONET' type='enum'/>
<exports symbol='XML_PARSE_PEDANTIC' type='enum'/>
+ <exports symbol='XML_FEATURE_AUTOMATA' type='enum'/>
<exports symbol='XML_PARSER_EOF' type='enum'/>
+ <exports symbol='XML_FEATURE_LEGACY' type='enum'/>
<exports symbol='XML_PARSER_CDATA_SECTION' type='enum'/>
+ <exports symbol='XML_FEATURE_REGEXP' type='enum'/>
+ <exports symbol='XML_PARSE_NOENT' type='enum'/>
<exports symbol='XML_PARSE_XINCLUDE' type='enum'/>
- <exports symbol='XML_PARSE_NOXINCNODE' type='enum'/>
- <exports symbol='XML_PARSE_READER' type='enum'/>
+ <exports symbol='XML_PARSE_NOCDATA' type='enum'/>
+ <exports symbol='XML_PARSER_ATTRIBUTE_VALUE' type='enum'/>
+ <exports symbol='XML_PARSE_NODICT' type='enum'/>
+ <exports symbol='XML_FEATURE_DEBUG' type='enum'/>
<exports symbol='XML_PARSE_SAX' type='enum'/>
- <exports symbol='XML_PARSE_NOENT' type='enum'/>
+ <exports symbol='XML_FEATURE_PATTERN' type='enum'/>
<exports symbol='XML_PARSER_ENTITY_VALUE' type='enum'/>
<exports symbol='XML_PARSE_DTDLOAD' type='enum'/>
+ <exports symbol='XML_FEATURE_HTML' type='enum'/>
<exports symbol='XML_PARSE_DTDATTR' type='enum'/>
<exports symbol='XML_PARSE_NOWARNING' type='enum'/>
+ <exports symbol='XML_PARSER_EPILOG' type='enum'/>
<exports symbol='XML_PARSE_NOERROR' type='enum'/>
+ <exports symbol='XML_PARSE_DOM' type='enum'/>
+ <exports symbol='XML_PARSE_PUSH_DOM' type='enum'/>
+ <exports symbol='XML_FEATURE_CATALOG' type='enum'/>
+ <exports symbol='XML_FEATURE_MODULES' type='enum'/>
+ <exports symbol='XML_FEATURE_NONE' type='enum'/>
<exports symbol='XML_PARSE_NSCLEAN' type='enum'/>
- <exports symbol='XML_PARSE_NOCDATA' type='enum'/>
+ <exports symbol='XML_FEATURE_XPATH' type='enum'/>
+ <exports symbol='XML_PARSE_COMPACT' type='enum'/>
<exports symbol='XML_PARSE_SAX1' type='enum'/>
+ <exports symbol='XML_PARSE_NOXINCNODE' type='enum'/>
<exports symbol='XML_PARSER_DTD' type='enum'/>
- <exports symbol='XML_PARSER_MISC' type='enum'/>
+ <exports symbol='XML_FEATURE_SCHEMATRON' type='enum'/>
<exports symbol='XML_PARSER_START' type='enum'/>
+ <exports symbol='XML_PARSER_SYSTEM_LITERAL' type='enum'/>
<exports symbol='XML_PARSE_UNKNOWN' type='enum'/>
<exports symbol='XML_PARSER_START_TAG' type='enum'/>
+ <exports symbol='XML_FEATURE_ISO8859X' type='enum'/>
<exports symbol='XML_PARSER_IGNORE' type='enum'/>
<exports symbol='XML_PARSER_COMMENT' type='enum'/>
<exports symbol='XML_PARSER_PUBLIC_LITERAL' type='enum'/>
+ <exports symbol='XML_FEATURE_DEBUG_RUN' type='enum'/>
+ <exports symbol='XML_FEATURE_HTTP' type='enum'/>
+ <exports symbol='XML_FEATURE_XPTR' type='enum'/>
+ <exports symbol='XML_FEATURE_VALID' type='enum'/>
<exports symbol='xmlParserNodeInfoSeqPtr' type='typedef'/>
<exports symbol='xmlSAXHandlerV1' type='typedef'/>
<exports symbol='xmlParserInputState' type='typedef'/>
<exports symbol='xmlParserNodeInfoPtr' type='typedef'/>
<exports symbol='xmlParserNodeInfoSeq' type='typedef'/>
+ <exports symbol='xmlFeature' type='typedef'/>
<exports symbol='xmlParserMode' type='typedef'/>
<exports symbol='xmlParserOption' type='typedef'/>
<exports symbol='xmlSAXHandlerV1Ptr' type='typedef'/>
@@ -794,6 +829,7 @@
<exports symbol='xmlParserInputRead' type='function'/>
<exports symbol='xmlReadFile' type='function'/>
<exports symbol='xmlGetFeaturesList' type='function'/>
+ <exports symbol='xmlHasFeature' type='function'/>
<exports symbol='unparsedEntityDeclSAXFunc' type='function'/>
<exports symbol='xmlSAXUserParseFile' type='function'/>
<exports symbol='fatalErrorSAXFunc' type='function'/>
@@ -960,6 +996,7 @@
<exports symbol='xmlStreamCtxt' type='typedef'/>
<exports symbol='xmlPattern' type='typedef'/>
<exports symbol='xmlPatternPtr' type='typedef'/>
+ <exports symbol='xmlPatternMinDepth' type='function'/>
<exports symbol='xmlPatternGetStreamCtxt' type='function'/>
<exports symbol='xmlPatternFromRoot' type='function'/>
<exports symbol='xmlFreePatternList' type='function'/>
@@ -1033,17 +1070,18 @@
<exports symbol='xmlRelaxNGSetValidErrors' type='function'/>
<exports symbol='xmlRelaxNGNewParserCtxt' type='function'/>
<exports symbol='xmlRelaxNGGetParserErrors' type='function'/>
- <exports symbol='xmlRelaxNGSetParserErrors' type='function'/>
+ <exports symbol='xmlRelaxNGValidatePopElement' type='function'/>
<exports symbol='xmlRelaxNGNewValidCtxt' type='function'/>
<exports symbol='xmlRelaxNGNewMemParserCtxt' type='function'/>
<exports symbol='xmlRelaxNGDump' type='function'/>
- <exports symbol='xmlRelaxNGValidityErrorFunc' type='function'/>
+ <exports symbol='xmlRelaxNGSetParserErrors' type='function'/>
<exports symbol='xmlRelaxNGParse' type='function'/>
- <exports symbol='xmlRelaxNGValidatePushElement' type='function'/>
<exports symbol='xmlRelaxNGValidateFullElement' type='function'/>
- <exports symbol='xmlRelaxNGValidatePopElement' type='function'/>
+ <exports symbol='xmlRelaxNGValidityErrorFunc' type='function'/>
+ <exports symbol='xmlRelaxNGValidatePushElement' type='function'/>
<exports symbol='xmlRelaxNGFree' type='function'/>
<exports symbol='xmlRelaxNGValidateDoc' type='function'/>
+ <exports symbol='xmlRelaxNGSetValidStructuredErrors' type='function'/>
<exports symbol='xmlRelaxNGFreeParserCtxt' type='function'/>
<exports symbol='xmlRelaxNGGetValidErrors' type='function'/>
<exports symbol='xmlRelaxNGInitTypes' type='function'/>
@@ -1273,6 +1311,35 @@
<exports symbol='xmlSchemaFreeType' type='function'/>
<exports symbol='xmlSchemaFreeWildcard' type='function'/>
</file>
+ <file name='schematron'>
+ <summary>XML Schemastron implementation</summary>
+ <description>interface to the XML Schematron validity checking. </description>
+ <author>Daniel Veillard </author>
+ <exports symbol='XML_SCHEMATRON_OUT_IO' type='enum'/>
+ <exports symbol='XML_SCHEMATRON_OUT_BUFFER' type='enum'/>
+ <exports symbol='XML_SCHEMATRON_OUT_FILE' type='enum'/>
+ <exports symbol='XML_SCHEMATRON_OUT_XML' type='enum'/>
+ <exports symbol='XML_SCHEMATRON_OUT_TEXT' type='enum'/>
+ <exports symbol='XML_SCHEMATRON_OUT_QUIET' type='enum'/>
+ <exports symbol='xmlSchematronValidCtxt' type='typedef'/>
+ <exports symbol='xmlSchematronValidOptions' type='typedef'/>
+ <exports symbol='xmlSchematronPtr' type='typedef'/>
+ <exports symbol='xmlSchematronParserCtxt' type='typedef'/>
+ <exports symbol='xmlSchematron' type='typedef'/>
+ <exports symbol='xmlSchematronValidCtxtPtr' type='typedef'/>
+ <exports symbol='xmlSchematronParserCtxtPtr' type='typedef'/>
+ <exports symbol='xmlSchematronValidateDoc' type='function'/>
+ <exports symbol='xmlSchematronFreeParserCtxt' type='function'/>
+ <exports symbol='xmlSchematronNewMemParserCtxt' type='function'/>
+ <exports symbol='xmlSchematronValidityErrorFunc' type='function'/>
+ <exports symbol='xmlSchematronNewParserCtxt' type='function'/>
+ <exports symbol='xmlSchematronValidityWarningFunc' type='function'/>
+ <exports symbol='xmlSchematronFree' type='function'/>
+ <exports symbol='xmlSchematronFreeValidCtxt' type='function'/>
+ <exports symbol='xmlSchematronParse' type='function'/>
+ <exports symbol='xmlSchematronNewDocParserCtxt' type='function'/>
+ <exports symbol='xmlSchematronNewValidCtxt' type='function'/>
+ </file>
<file name='threads'>
<summary>interfaces for thread handling</summary>
<description>set of generic threading related routines should work with pthreads, Windows native or TLS threads </description>
@@ -1585,6 +1652,7 @@
<exports symbol='_xmlURI' type='struct'/>
<exports symbol='xmlNormalizeURIPath' type='function'/>
<exports symbol='xmlPrintURI' type='function'/>
+ <exports symbol='xmlParseURIRaw' type='function'/>
<exports symbol='xmlURIUnescapeString' type='function'/>
<exports symbol='xmlParseURI' type='function'/>
<exports symbol='xmlCreateURI' type='function'/>
@@ -1831,9 +1899,10 @@
<exports symbol='xmlAutomataNewCountedTrans' type='function'/>
<exports symbol='xmlAutomataNewCounterTrans' type='function'/>
<exports symbol='xmlAutomataCompile' type='function'/>
- <exports symbol='xmlNewAutomata' type='function'/>
+ <exports symbol='xmlAutomataNewNegTrans' type='function'/>
<exports symbol='xmlAutomataNewEpsilon' type='function'/>
<exports symbol='xmlAutomataNewCountTrans2' type='function'/>
+ <exports symbol='xmlNewAutomata' type='function'/>
<exports symbol='xmlAutomataSetFinalState' type='function'/>
<exports symbol='xmlAutomataNewOnceTrans' type='function'/>
<exports symbol='xmlAutomataNewTransition' type='function'/>
@@ -1912,6 +1981,7 @@
<exports symbol='XML_SCHEMAP_SRC_RESOLVE' type='enum'/>
<exports symbol='XML_SCHEMAV_CVC_FACET_VALID' type='enum'/>
<exports symbol='XML_SCHEMAP_RESTRICTION_NONAME_NOREF' type='enum'/>
+ <exports symbol='XML_I18N_NO_OUTPUT' type='enum'/>
<exports symbol='XML_CHECK_FOUND_ATTRIBUTE' type='enum'/>
<exports symbol='XML_ERR_STANDALONE_VALUE' type='enum'/>
<exports symbol='XML_SCHEMAP_REDEFINED_ATTR' type='enum'/>
@@ -2032,7 +2102,7 @@
<exports symbol='XML_SCHEMAV_CVC_ELT_4_3' type='enum'/>
<exports symbol='XML_FTP_ACCNT' type='enum'/>
<exports symbol='XML_SCHEMAV_CVC_ELT_4_1' type='enum'/>
- <exports symbol='XML_SCHEMAP_EXTENSION_NO_BASE' type='enum'/>
+ <exports symbol='XML_RNGP_PAT_START_DATA' type='enum'/>
<exports symbol='XML_IO_ENOENT' type='enum'/>
<exports symbol='XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3' type='enum'/>
<exports symbol='XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2' type='enum'/>
@@ -2074,6 +2144,7 @@
<exports symbol='XML_DTD_MULTIPLE_ID' type='enum'/>
<exports symbol='XML_FROM_XPATH' type='enum'/>
<exports symbol='XML_TREE_INVALID_DEC' type='enum'/>
+ <exports symbol='XML_SCHEMAP_EXTENSION_NO_BASE' type='enum'/>
<exports symbol='XML_SCHEMAP_E_PROPS_CORRECT_5' type='enum'/>
<exports symbol='XML_SCHEMAP_E_PROPS_CORRECT_4' type='enum'/>
<exports symbol='XML_CHECK_FOUND_DOCTYPE' type='enum'/>
@@ -2112,7 +2183,7 @@
<exports symbol='XML_SCHEMAP_SRC_ELEMENT_3' type='enum'/>
<exports symbol='XML_SCHEMAP_UNKNOWN_REF' type='enum'/>
<exports symbol='XML_RNGP_PAT_DATA_EXCEPT_EMPTY' type='enum'/>
- <exports symbol='XML_RNGP_PAT_START_DATA' type='enum'/>
+ <exports symbol='XML_FROM_I18N' type='enum'/>
<exports symbol='XML_DTD_MISSING_ATTRIBUTE' type='enum'/>
<exports symbol='XML_IO_EMFILE' type='enum'/>
<exports symbol='XML_RNGP_EMPTY_NOT_EMPTY' type='enum'/>
@@ -2151,6 +2222,7 @@
<exports symbol='XML_DTD_NOTATION_VALUE' type='enum'/>
<exports symbol='XML_SCHEMAP_ST_PROPS_CORRECT_2' type='enum'/>
<exports symbol='XML_SCHEMAP_ST_PROPS_CORRECT_3' type='enum'/>
+ <exports symbol='XML_I18N_NO_NAME' type='enum'/>
<exports symbol='XML_SCHEMAP_ST_PROPS_CORRECT_1' type='enum'/>
<exports symbol='XML_RNGP_EXCEPT_MISSING' type='enum'/>
<exports symbol='XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID' type='enum'/>
@@ -2158,6 +2230,7 @@
<exports symbol='XML_DTD_MIXED_CORRUPT' type='enum'/>
<exports symbol='XML_ERR_ENTITY_BOUNDARY' type='enum'/>
<exports symbol='XML_SCHEMAP_ELEMFORMDEFAULT_VALUE' type='enum'/>
+ <exports symbol='XML_I18N_EXCESS_HANDLER' type='enum'/>
<exports symbol='XML_RNGP_DATA_CONTENT' type='enum'/>
<exports symbol='XML_ERR_STRING_NOT_STARTED' type='enum'/>
<exports symbol='XML_RNGP_EXCEPT_MULTIPLE' type='enum'/>
@@ -2319,7 +2392,7 @@
<exports symbol='XML_XPATH_INVALID_ARITY' type='enum'/>
<exports symbol='XML_RNGP_ERROR_TYPE_LIB' type='enum'/>
<exports symbol='XML_XPTR_EVAL_FAILED' type='enum'/>
- <exports symbol='XML_RNGP_INCLUDE_RECURSE' type='enum'/>
+ <exports symbol='XML_DTD_NO_ROOT' type='enum'/>
<exports symbol='XML_SCHEMAP_IMPORT_REDEFINE_NSNAME' type='enum'/>
<exports symbol='XML_SCHEMAP_UNKNOWN_ATTR_CHILD' type='enum'/>
<exports symbol='XML_ERR_UNKNOWN_ENCODING' type='enum'/>
@@ -2346,6 +2419,7 @@
<exports symbol='XML_ERR_CHARREF_IN_DTD' type='enum'/>
<exports symbol='XML_IO_ENFILE' type='enum'/>
<exports symbol='XML_ERR_ENTITY_IS_PARAMETER' type='enum'/>
+ <exports symbol='XML_I18N_CONV_FAILED' type='enum'/>
<exports symbol='XML_CHECK_WRONG_PARENT' type='enum'/>
<exports symbol='XML_RNGP_PARENTREF_NO_NAME' type='enum'/>
<exports symbol='XML_IO_EPERM' type='enum'/>
@@ -2398,6 +2472,7 @@
<exports symbol='XML_SCHEMAP_UNKNOWN_CHOICE_CHILD' type='enum'/>
<exports symbol='XML_RNGP_ELEM_CONTENT_ERROR' type='enum'/>
<exports symbol='XML_SCHEMAV_HAVEDEFAULT' type='enum'/>
+ <exports symbol='XML_I18N_NO_HANDLER' type='enum'/>
<exports symbol='XML_RNGP_MISSING_HREF' type='enum'/>
<exports symbol='XML_ERR_PI_NOT_FINISHED' type='enum'/>
<exports symbol='XML_FROM_RELAXNGP' type='enum'/>
@@ -2476,6 +2551,7 @@
<exports symbol='XML_XPATH_ENCODING_ERROR' type='enum'/>
<exports symbol='XML_SCHEMAP_SRC_INCLUDE' type='enum'/>
<exports symbol='XML_RNGP_NSNAME_ATTR_ANCESTOR' type='enum'/>
+ <exports symbol='XML_SCHEMAP_SRC_REDEFINE' type='enum'/>
<exports symbol='XML_RNGP_REF_CYCLE' type='enum'/>
<exports symbol='XML_RNGP_PAT_ATTR_ATTR' type='enum'/>
<exports symbol='XML_XPTR_UNKNOWN_SCHEME' type='enum'/>
@@ -2517,7 +2593,7 @@
<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_DTD_NO_ROOT' type='enum'/>
+ <exports symbol='XML_RNGP_INCLUDE_RECURSE' type='enum'/>
<exports symbol='XML_ERR_INVALID_URI' type='enum'/>
<exports symbol='XML_IO_ESRCH' type='enum'/>
<exports symbol='XML_FROM_XPOINTER' type='enum'/>
@@ -2611,11 +2687,12 @@
<summary>macros for marking symbols as exportable/importable.</summary>
<description>macros for marking symbols as exportable/importable. </description>
<author>Igor Zlatovic &lt;igor@zlatkovic.com&gt; </author>
- <exports symbol='XMLCALL' type='macro'/>
<exports symbol='_REENTRANT' type='macro'/>
- <exports symbol='XMLPUBFUN' type='macro'/>
+ <exports symbol='XMLCDECL' type='macro'/>
<exports symbol='XMLPUBVAR' type='macro'/>
<exports symbol='LIBXML_DLL_IMPORT' type='macro'/>
+ <exports symbol='XMLCALL' type='macro'/>
+ <exports symbol='XMLPUBFUN' type='macro'/>
</file>
<file name='xmlmemory'>
<summary>interface for the memory allocator</summary>
@@ -2796,27 +2873,60 @@
<summary>regular expressions handling</summary>
<description>basic API for libxml regular expressions handling used for XML Schemas and validation. </description>
<author>Daniel Veillard </author>
+ <exports symbol='XML_EXP_COUNT' type='enum'/>
+ <exports symbol='XML_EXP_EMPTY' type='enum'/>
+ <exports symbol='XML_EXP_SEQ' type='enum'/>
+ <exports symbol='XML_EXP_ATOM' type='enum'/>
+ <exports symbol='XML_EXP_OR' type='enum'/>
+ <exports symbol='XML_EXP_FORBID' type='enum'/>
<exports symbol='xmlRegExecCtxtPtr' type='typedef'/>
+ <exports symbol='xmlExpCtxt' type='typedef'/>
+ <exports symbol='xmlExpNodePtr' type='typedef'/>
+ <exports symbol='xmlExpCtxtPtr' type='typedef'/>
+ <exports symbol='xmlExpNodeType' type='typedef'/>
+ <exports symbol='xmlRegExecCtxt' type='typedef'/>
+ <exports symbol='xmlExpNode' type='typedef'/>
<exports symbol='xmlRegexp' type='typedef'/>
<exports symbol='xmlRegexpPtr' type='typedef'/>
- <exports symbol='xmlRegExecCtxt' type='typedef'/>
- <exports symbol='xmlRegExecErrInfo' type='function'/>
- <exports symbol='xmlRegFreeExecCtxt' type='function'/>
- <exports symbol='xmlRegexpExec' type='function'/>
+ <exports symbol='forbiddenExp' type='variable'/>
+ <exports symbol='emptyExp' type='variable'/>
<exports symbol='xmlRegExecCallbacks' type='function'/>
<exports symbol='xmlRegNewExecCtxt' type='function'/>
- <exports symbol='xmlRegExecPushString2' type='function'/>
+ <exports symbol='xmlExpNewOr' type='function'/>
<exports symbol='xmlRegFreeRegexp' type='function'/>
+ <exports symbol='xmlExpRef' type='function'/>
+ <exports symbol='xmlRegexpIsDeterminist' type='function'/>
+ <exports symbol='xmlRegExecErrInfo' type='function'/>
+ <exports symbol='xmlRegFreeExecCtxt' type='function'/>
+ <exports symbol='xmlExpCtxtNbCons' type='function'/>
+ <exports symbol='xmlExpSubsume' type='function'/>
+ <exports symbol='xmlRegExecPushString2' type='function'/>
<exports symbol='xmlRegExecNextValues' type='function'/>
+ <exports symbol='xmlExpExpDerive' type='function'/>
+ <exports symbol='xmlExpIsNillable' type='function'/>
+ <exports symbol='xmlExpFreeCtxt' type='function'/>
+ <exports symbol='xmlExpDump' type='function'/>
+ <exports symbol='xmlExpNewSeq' type='function'/>
+ <exports symbol='xmlExpFree' type='function'/>
+ <exports symbol='xmlExpNewRange' type='function'/>
<exports symbol='xmlRegexpCompile' type='function'/>
- <exports symbol='xmlRegexpIsDeterminist' type='function'/>
+ <exports symbol='xmlExpNewAtom' type='function'/>
+ <exports symbol='xmlRegexpExec' type='function'/>
<exports symbol='xmlRegExecPushString' type='function'/>
+ <exports symbol='xmlExpGetStart' type='function'/>
+ <exports symbol='xmlExpParse' type='function'/>
+ <exports symbol='xmlExpNewCtxt' type='function'/>
+ <exports symbol='xmlExpGetLanguage' type='function'/>
+ <exports symbol='xmlExpStringDerive' type='function'/>
+ <exports symbol='xmlExpCtxtNbNodes' type='function'/>
+ <exports symbol='xmlExpMaxToken' type='function'/>
<exports symbol='xmlRegexpPrint' type='function'/>
</file>
<file name='xmlsave'>
<summary>the XML document serializer</summary>
<description>API to save document or subtree of document </description>
<author>Daniel Veillard </author>
+ <exports symbol='XML_SAVE_NO_DECL' type='enum'/>
<exports symbol='XML_SAVE_FORMAT' type='enum'/>
<exports symbol='xmlSaveOption' type='typedef'/>
<exports symbol='xmlSaveCtxt' type='typedef'/>
@@ -2883,7 +2993,7 @@
<exports symbol='xmlSchemaValidateStream' type='function'/>
<exports symbol='xmlSchemaGetParserErrors' type='function'/>
<exports symbol='xmlSchemaValidateOneElement' type='function'/>
- <exports symbol='xmlSchemaDump' type='function'/>
+ <exports symbol='xmlSchemaSetValidStructuredErrors' type='function'/>
<exports symbol='xmlSchemaSetValidErrors' type='function'/>
<exports symbol='xmlSchemaValidCtxtGetOptions' type='function'/>
<exports symbol='xmlSchemaValidateFile' type='function'/>
@@ -2894,6 +3004,7 @@
<exports symbol='xmlSchemaSetValidOptions' type='function'/>
<exports symbol='xmlSchemaSetParserErrors' type='function'/>
<exports symbol='xmlSchemaValidityWarningFunc' type='function'/>
+ <exports symbol='xmlSchemaDump' type='function'/>
<exports symbol='xmlSchemaFreeValidCtxt' type='function'/>
<exports symbol='xmlSchemaNewValidCtxt' type='function'/>
</file>
@@ -3167,6 +3278,7 @@
<exports symbol='LIBXML_PUSH_ENABLED' type='macro'/>
<exports symbol='LIBXML_SAX1_ENABLED' type='macro'/>
<exports symbol='WITHOUT_TRIO' type='macro'/>
+ <exports symbol='LIBXML_SCHEMATRON_ENABLED' type='macro'/>
<exports symbol='LIBXML_HTTP_ENABLED' type='macro'/>
<exports symbol='LIBXML_OUTPUT_ENABLED' type='macro'/>
<exports symbol='WITH_TRIO' type='macro'/>
@@ -3188,6 +3300,7 @@
<exports symbol='DEBUG_MEMORY_LOCATION' type='macro'/>
<exports symbol='LIBXML_TEST_VERSION' type='macro'/>
<exports symbol='LIBXML_XPATH_ENABLED' type='macro'/>
+ <exports symbol='LIBXML_EXPR_ENABLED' type='macro'/>
<exports symbol='LIBXML_VALID_ENABLED' type='macro'/>
<exports symbol='LIBXML_TREE_ENABLED' type='macro'/>
<exports symbol='LIBXML_PATTERN_ENABLED' type='macro'/>
@@ -3286,8 +3399,10 @@
<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</description>
<author>Daniel Veillard </author>
<exports symbol='xmlXPathNodeSetGetLength' type='macro'/>
- <exports symbol='xmlXPathNodeSetIsEmpty' type='macro'/>
+ <exports symbol='XML_XPATH_CHECKNS' type='macro'/>
+ <exports symbol='XML_XPATH_NOVAR' type='macro'/>
<exports symbol='xmlXPathNodeSetItem' type='macro'/>
+ <exports symbol='xmlXPathNodeSetIsEmpty' type='macro'/>
<exports symbol='XPATH_NUMBER_ERROR' type='enum'/>
<exports symbol='XPATH_BOOLEAN' type='enum'/>
<exports symbol='XPATH_START_LITERAL_ERROR' type='enum'/>
@@ -3736,6 +3851,9 @@
<macro name='LIBXML_DOTTED_VERSION' file='xmlversion'>
<info>the version string like &quot;1.2.3&quot;</info>
</macro>
+ <macro name='LIBXML_EXPR_ENABLED' file='xmlversion'>
+ <info>Whether the formal expressions interfaces are compiled in</info>
+ </macro>
<macro name='LIBXML_FTP_ENABLED' file='xmlversion'>
<info>Whether the FTP support is configured in</info>
</macro>
@@ -3758,6 +3876,7 @@
<info>Whether the module interfaces are compiled in</info>
</macro>
<macro name='LIBXML_MODULE_EXTENSION' file='xmlversion'>
+ <info>the string suffix used by dynamic modules (usually shared libraries)</info>
</macro>
<macro name='LIBXML_OUTPUT_ENABLED' file='xmlversion'>
<info>Whether the serialization/saving support is configured in</info>
@@ -3780,6 +3899,9 @@
<macro name='LIBXML_SCHEMAS_ENABLED' file='xmlversion'>
<info>Whether the Schemas validation interfaces are compiled in</info>
</macro>
+ <macro name='LIBXML_SCHEMATRON_ENABLED' file='xmlversion'>
+ <info>Whether the Schematron validation interfaces are compiled in</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>
@@ -3866,6 +3988,8 @@
</macro>
<macro name='XMLCALL' file='xmlexports'>
</macro>
+ <macro name='XMLCDECL' file='xmlexports'>
+ </macro>
<macro name='XMLPUBFUN' file='xmlexports'>
</macro>
<macro name='XMLPUBVAR' file='xmlexports'>
@@ -4165,6 +4289,12 @@
<macro name='XML_XML_NAMESPACE' file='tree'>
<info>This is the namespace for the special xml: prefix predefined in the XML Namespace specification.</info>
</macro>
+ <macro name='XML_XPATH_CHECKNS' file='xpath'>
+ <info>check namespaces at compilation</info>
+ </macro>
+ <macro name='XML_XPATH_NOVAR' file='xpath'>
+ <info>forbid variables in expression</info>
+ </macro>
<macro name='XP_ERROR' file='xpathInternals'>
<info>Macro to raise an XPath error and return.</info>
<arg name='X' info='the error code'/>
@@ -4354,11 +4484,13 @@
<enum name='HTML_DEPRECATED' file='HTMLparser' value='2' type='htmlStatus'/>
<enum name='HTML_INVALID' file='HTMLparser' value='1' type='htmlStatus'/>
<enum name='HTML_NA' file='HTMLparser' value='0' type='htmlStatus' info='something we don&apos;t check at all'/>
+ <enum name='HTML_PARSE_COMPACT' file='HTMLparser' value='65536' type='htmlParserOption' info=' compact small text nodes'/>
<enum name='HTML_PARSE_NOBLANKS' file='HTMLparser' value='256' type='htmlParserOption' info='remove blank nodes'/>
<enum name='HTML_PARSE_NOERROR' file='HTMLparser' value='32' type='htmlParserOption' info='suppress error reports'/>
- <enum name='HTML_PARSE_NONET' file='HTMLparser' value='2048' type='htmlParserOption' info=' Forbid network access'/>
+ <enum name='HTML_PARSE_NONET' file='HTMLparser' value='2048' type='htmlParserOption' info='Forbid network access'/>
<enum name='HTML_PARSE_NOWARNING' file='HTMLparser' value='64' type='htmlParserOption' info='suppress warning reports'/>
<enum name='HTML_PARSE_PEDANTIC' file='HTMLparser' value='128' type='htmlParserOption' info='pedantic error reporting'/>
+ <enum name='HTML_PARSE_RECOVER' file='HTMLparser' value='1' type='htmlParserOption' info='Relaxed parsing'/>
<enum name='HTML_REQUIRED' file='HTMLparser' value='12' type='htmlStatus' info=' VALID bit set so ( &amp; HTML_VALID ) is TRUE'/>
<enum name='HTML_VALID' file='HTMLparser' value='4' type='htmlStatus'/>
<enum name='XLINK_ACTUATE_AUTO' file='xlink' value='1' type='xlinkActuate'/>
@@ -4434,7 +4566,7 @@
<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='5038' type='xmlParserErrors' info='5033'/>
+ <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'/>
@@ -4473,7 +4605,7 @@
<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='5039' type='xmlParserErrors' info=' 503'/>
+ <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'/>
@@ -4642,9 +4774,46 @@
<enum name='XML_ERR_WARNING' file='xmlerror' value='1' type='xmlErrorLevel' info='A simple warning'/>
<enum name='XML_ERR_XMLDECL_NOT_FINISHED' file='xmlerror' value='57' type='xmlParserErrors' info='57'/>
<enum name='XML_ERR_XMLDECL_NOT_STARTED' file='xmlerror' value='56' type='xmlParserErrors' info='56'/>
+ <enum name='XML_EXP_ATOM' file='xmlregexp' value='2' type='xmlExpNodeType'/>
+ <enum name='XML_EXP_COUNT' file='xmlregexp' value='5' type='xmlExpNodeType'/>
+ <enum name='XML_EXP_EMPTY' file='xmlregexp' value='0' type='xmlExpNodeType'/>
+ <enum name='XML_EXP_FORBID' file='xmlregexp' value='1' type='xmlExpNodeType'/>
+ <enum name='XML_EXP_OR' file='xmlregexp' value='4' type='xmlExpNodeType'/>
+ <enum name='XML_EXP_SEQ' file='xmlregexp' value='3' type='xmlExpNodeType'/>
<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_FEATURE_AUTOMATA' file='parser' value='23' type='xmlFeature'/>
+ <enum name='XML_FEATURE_C14N' file='parser' value='14' type='xmlFeature'/>
+ <enum name='XML_FEATURE_CATALOG' file='parser' value='15' type='xmlFeature'/>
+ <enum name='XML_FEATURE_DEBUG' file='parser' value='28' type='xmlFeature'/>
+ <enum name='XML_FEATURE_DEBUG_MEM' file='parser' value='29' type='xmlFeature'/>
+ <enum name='XML_FEATURE_DEBUG_RUN' file='parser' value='30' type='xmlFeature'/>
+ <enum name='XML_FEATURE_EXPR' file='parser' value='24' type='xmlFeature'/>
+ <enum name='XML_FEATURE_FTP' file='parser' value='9' type='xmlFeature'/>
+ <enum name='XML_FEATURE_HTML' file='parser' value='12' type='xmlFeature'/>
+ <enum name='XML_FEATURE_HTTP' file='parser' value='10' type='xmlFeature'/>
+ <enum name='XML_FEATURE_ICONV' file='parser' value='19' type='xmlFeature'/>
+ <enum name='XML_FEATURE_ISO8859X' file='parser' value='20' type='xmlFeature'/>
+ <enum name='XML_FEATURE_LEGACY' file='parser' value='13' type='xmlFeature'/>
+ <enum name='XML_FEATURE_MODULES' file='parser' value='27' type='xmlFeature'/>
+ <enum name='XML_FEATURE_NONE' file='parser' value='99999' type='xmlFeature' info=' just to be sure of allocation size'/>
+ <enum name='XML_FEATURE_OUTPUT' file='parser' value='3' type='xmlFeature'/>
+ <enum name='XML_FEATURE_PATTERN' file='parser' value='6' type='xmlFeature'/>
+ <enum name='XML_FEATURE_PUSH' file='parser' value='4' type='xmlFeature'/>
+ <enum name='XML_FEATURE_READER' file='parser' value='5' type='xmlFeature'/>
+ <enum name='XML_FEATURE_REGEXP' file='parser' value='22' type='xmlFeature'/>
+ <enum name='XML_FEATURE_SAX1' file='parser' value='8' type='xmlFeature'/>
+ <enum name='XML_FEATURE_SCHEMAS' file='parser' value='25' type='xmlFeature'/>
+ <enum name='XML_FEATURE_SCHEMATRON' file='parser' value='26' type='xmlFeature'/>
+ <enum name='XML_FEATURE_THREAD' file='parser' value='1' type='xmlFeature'/>
+ <enum name='XML_FEATURE_TREE' file='parser' value='2' type='xmlFeature'/>
+ <enum name='XML_FEATURE_UNICODE' file='parser' value='21' type='xmlFeature'/>
+ <enum name='XML_FEATURE_VALID' file='parser' value='11' type='xmlFeature'/>
+ <enum name='XML_FEATURE_WRITER' file='parser' value='7' type='xmlFeature'/>
+ <enum name='XML_FEATURE_XINCLUDE' file='parser' value='18' type='xmlFeature'/>
+ <enum name='XML_FEATURE_XPATH' file='parser' value='16' type='xmlFeature'/>
+ <enum name='XML_FEATURE_XPTR' file='parser' value='17' type='xmlFeature'/>
<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'/>
@@ -4653,9 +4822,10 @@
<enum name='XML_FROM_FTP' file='xmlerror' value='9' type='xmlErrorDomain' info='The FTP module'/>
<enum name='XML_FROM_HTML' file='xmlerror' value='5' type='xmlErrorDomain' info='The HTML parser'/>
<enum name='XML_FROM_HTTP' file='xmlerror' value='10' type='xmlErrorDomain' info='The HTTP module'/>
+ <enum name='XML_FROM_I18N' file='xmlerror' value='27' type='xmlErrorDomain' info=' The module handling character conversion'/>
<enum name='XML_FROM_IO' file='xmlerror' value='8' type='xmlErrorDomain' info='The Input/Output stack'/>
<enum name='XML_FROM_MEMORY' file='xmlerror' value='6' type='xmlErrorDomain' info='The memory allocator'/>
- <enum name='XML_FROM_MODULE' file='xmlerror' value='26' type='xmlErrorDomain' info=' The dynamically loaded module modul'/>
+ <enum name='XML_FROM_MODULE' file='xmlerror' value='26' type='xmlErrorDomain' info='The dynamically loaded module modul'/>
<enum name='XML_FROM_NAMESPACE' file='xmlerror' value='3' type='xmlErrorDomain' info='The XML Namespace module'/>
<enum name='XML_FROM_NONE' file='xmlerror' value='0' type='xmlErrorDomain'/>
<enum name='XML_FROM_OUTPUT' file='xmlerror' value='7' type='xmlErrorDomain' info='The serialization code'/>
@@ -4682,6 +4852,11 @@
<enum name='XML_HTTP_UNKNOWN_HOST' file='xmlerror' value='2022' type='xmlParserErrors' info='2022'/>
<enum name='XML_HTTP_URL_SYNTAX' file='xmlerror' value='2020' type='xmlParserErrors'/>
<enum name='XML_HTTP_USE_IP' file='xmlerror' value='2021' type='xmlParserErrors' info='2021'/>
+ <enum name='XML_I18N_CONV_FAILED' file='xmlerror' value='6003' type='xmlParserErrors' info='6003'/>
+ <enum name='XML_I18N_EXCESS_HANDLER' file='xmlerror' value='6002' type='xmlParserErrors' info='6002'/>
+ <enum name='XML_I18N_NO_HANDLER' file='xmlerror' value='6001' type='xmlParserErrors' info='6001'/>
+ <enum name='XML_I18N_NO_NAME' file='xmlerror' value='6000' type='xmlParserErrors'/>
+ <enum name='XML_I18N_NO_OUTPUT' file='xmlerror' value='6004' type='xmlParserErrors' info='6004'/>
<enum name='XML_INTERNAL_GENERAL_ENTITY' file='entities' value='1' type='xmlEntityType'/>
<enum name='XML_INTERNAL_PARAMETER_ENTITY' file='entities' value='4' type='xmlEntityType'/>
<enum name='XML_INTERNAL_PREDEFINED_ENTITY' file='entities' value='6' type='xmlEntityType'/>
@@ -4779,6 +4954,7 @@
<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_COMPACT' file='parser' value='65536' type='xmlParserOption' info=' compact small text nodes'/>
<enum name='XML_PARSE_DOM' file='parser' value='1' type='xmlParserMode'/>
<enum name='XML_PARSE_DTDATTR' file='parser' value='8' type='xmlParserOption' info='default DTD attributes'/>
<enum name='XML_PARSE_DTDLOAD' file='parser' value='4' type='xmlParserOption' info='load the external subset'/>
@@ -4790,7 +4966,7 @@
<enum name='XML_PARSE_NOERROR' file='parser' value='32' type='xmlParserOption' info='suppress error reports'/>
<enum name='XML_PARSE_NONET' file='parser' value='2048' type='xmlParserOption' info='Forbid network access'/>
<enum name='XML_PARSE_NOWARNING' file='parser' value='64' type='xmlParserOption' info='suppress warning reports'/>
- <enum name='XML_PARSE_NOXINCNODE' file='parser' value='32768' type='xmlParserOption' info=' do not generate XINCLUDE START/END nodes'/>
+ <enum name='XML_PARSE_NOXINCNODE' file='parser' value='32768' type='xmlParserOption' info='do not generate XINCLUDE START/END nodes'/>
<enum name='XML_PARSE_NSCLEAN' file='parser' value='8192' type='xmlParserOption' info='remove redundant namespaces declarations'/>
<enum name='XML_PARSE_PEDANTIC' file='parser' value='128' type='xmlParserOption' info='pedantic error reporting'/>
<enum name='XML_PARSE_PUSH_DOM' file='parser' value='3' type='xmlParserMode'/>
@@ -4992,8 +5168,9 @@
<enum name='XML_RNGP_XMLNS_NAME' file='xmlerror' value='1121' type='xmlParserErrors' info='1121'/>
<enum name='XML_RNGP_XML_NS' file='xmlerror' value='1122' type='xmlParserErrors' info='1122'/>
<enum name='XML_SAVE_CHAR_INVALID' file='xmlerror' value='1401' type='xmlParserErrors' info='1401'/>
- <enum name='XML_SAVE_FORMAT' file='xmlsave' value='1' type='xmlSaveOption' info=' format save output'/>
+ <enum name='XML_SAVE_FORMAT' file='xmlsave' value='1' type='xmlSaveOption' info='format save output'/>
<enum name='XML_SAVE_NOT_UTF8' file='xmlerror' value='1400' type='xmlParserErrors'/>
+ <enum name='XML_SAVE_NO_DECL' file='xmlsave' value='2' type='xmlSaveOption' info=' drop the xml declaration'/>
<enum name='XML_SAVE_NO_DOCTYPE' file='xmlerror' value='1402' type='xmlParserErrors' info='1402'/>
<enum name='XML_SAVE_UNKNOWN_ENCODING' file='xmlerror' value='1403' type='xmlParserErrors' info='1403'/>
<enum name='XML_SCHEMAP_ATTRFORMDEFAULT_VALUE' file='xmlerror' value='1701' type='xmlParserErrors' info='1701'/>
@@ -5135,6 +5312,7 @@
<enum name='XML_SCHEMAP_SRC_IMPORT_3_2' file='xmlerror' value='1796' type='xmlParserErrors' info='1796'/>
<enum name='XML_SCHEMAP_SRC_INCLUDE' file='xmlerror' value='3050' type='xmlParserErrors' info='3050'/>
<enum name='XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE' file='xmlerror' value='3006' type='xmlParserErrors' info='3006'/>
+ <enum name='XML_SCHEMAP_SRC_REDEFINE' file='xmlerror' value='3081' type='xmlParserErrors' info='3081'/>
<enum name='XML_SCHEMAP_SRC_RESOLVE' file='xmlerror' value='3004' type='xmlParserErrors' info='3004'/>
<enum name='XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE' file='xmlerror' value='3005' type='xmlParserErrors' info='3005'/>
<enum name='XML_SCHEMAP_SRC_SIMPLE_TYPE_1' file='xmlerror' value='3000' type='xmlParserErrors'/>
@@ -5251,6 +5429,12 @@
<enum name='XML_SCHEMAS_ULONG' file='schemasInternals' value='38' type='xmlSchemaValType'/>
<enum name='XML_SCHEMAS_UNKNOWN' file='schemasInternals' value='0' type='xmlSchemaValType'/>
<enum name='XML_SCHEMAS_USHORT' file='schemasInternals' value='40' type='xmlSchemaValType'/>
+ <enum name='XML_SCHEMATRON_OUT_BUFFER' file='schematron' value='512' type='xmlSchematronValidOptions' info='output to a buffer'/>
+ <enum name='XML_SCHEMATRON_OUT_FILE' file='schematron' value='256' type='xmlSchematronValidOptions' info='output to a file descriptor'/>
+ <enum name='XML_SCHEMATRON_OUT_IO' file='schematron' value='1024' type='xmlSchematronValidOptions' info=' output to I/O mechanism'/>
+ <enum name='XML_SCHEMATRON_OUT_QUIET' file='schematron' value='1' type='xmlSchematronValidOptions' info='quiet no report'/>
+ <enum name='XML_SCHEMATRON_OUT_TEXT' file='schematron' value='2' type='xmlSchematronValidOptions' info='build a textual report'/>
+ <enum name='XML_SCHEMATRON_OUT_XML' file='schematron' value='4' type='xmlSchematronValidOptions' info='output SVRL'/>
<enum name='XML_SCHEMAV_ATTRINVALID' file='xmlerror' value='1821' type='xmlParserErrors' info='1821'/>
<enum name='XML_SCHEMAV_ATTRUNKNOWN' file='xmlerror' value='1820' type='xmlParserErrors' info='1820'/>
<enum name='XML_SCHEMAV_CONSTRUCT' file='xmlerror' value='1817' type='xmlParserErrors' info='1817'/>
@@ -5757,6 +5941,12 @@ actually an xmlCharEncoding'/>
<typedef name='xmlErrorDomain' file='xmlerror' type='enum'/>
<typedef name='xmlErrorLevel' file='xmlerror' type='enum'/>
<typedef name='xmlErrorPtr' file='xmlerror' type='xmlError *'/>
+ <struct name='xmlExpCtxt' file='xmlregexp' type='struct _xmlExpCtxt'/>
+ <typedef name='xmlExpCtxtPtr' file='xmlregexp' type='xmlExpCtxt *'/>
+ <struct name='xmlExpNode' file='xmlregexp' type='struct _xmlExpNode'/>
+ <typedef name='xmlExpNodePtr' file='xmlregexp' type='xmlExpNode *'/>
+ <typedef name='xmlExpNodeType' file='xmlregexp' type='enum'/>
+ <typedef name='xmlFeature' file='parser' type='enum'/>
<struct name='xmlGlobalState' file='globals' type='struct _xmlGlobalState'>
<field name='xmlParserVersion' type='const char *' info=''/>
<field name='xmlDefaultSAXLocator' type='xmlSAXLocator' info=''/>
@@ -6317,6 +6507,13 @@ actually an xmlCharEncoding'/>
</struct>
<typedef name='xmlSchemaWildcardNsPtr' file='schemasInternals' type='xmlSchemaWildcardNs *'/>
<typedef name='xmlSchemaWildcardPtr' file='schemasInternals' type='xmlSchemaWildcard *'/>
+ <struct name='xmlSchematron' file='schematron' type='struct _xmlSchematron'/>
+ <struct name='xmlSchematronParserCtxt' file='schematron' type='struct _xmlSchematronParserCtxt'/>
+ <typedef name='xmlSchematronParserCtxtPtr' file='schematron' type='xmlSchematronParserCtxt *'/>
+ <typedef name='xmlSchematronPtr' file='schematron' type='xmlSchematron *'/>
+ <struct name='xmlSchematronValidCtxt' file='schematron' type='struct _xmlSchematronValidCtxt'/>
+ <typedef name='xmlSchematronValidCtxtPtr' file='schematron' type='xmlSchematronValidCtxt *'/>
+ <typedef name='xmlSchematronValidOptions' file='schematron' type='enum'/>
<struct name='xmlShellCtxt' file='debugXML' type='struct _xmlShellCtxt'>
<field name='filename' type='char *' info=''/>
<field name='doc' type='xmlDocPtr' info=''/>
@@ -6418,6 +6615,7 @@ actually an xmlCharEncoding'/>
<field name='lastError' type='xmlError' info=' the last error'/>
<field name='debugNode' type='xmlNodePtr' info=' the source node XSLT dictionnary'/>
<field name='dict' type='xmlDictPtr' info=' dictionnary if any'/>
+ <field name='flags' type='int' info=' flags to control compilation'/>
</struct>
<typedef name='xmlXPathContextPtr' file='xpath' type='xmlXPathContext *'/>
<typedef name='xmlXPathError' file='xpath' type='enum'/>
@@ -6464,6 +6662,8 @@ actually an xmlCharEncoding'/>
</struct>
<typedef name='xmlXPathVariablePtr' file='xpath' type='xmlXPathVariable *'/>
<variable name='docbDefaultSAXHandler' file='globals' type='xmlSAXHandlerV1'/>
+ <variable name='emptyExp' file='xmlregexp' type='xmlExpNodePtr'/>
+ <variable name='forbiddenExp' file='xmlregexp' type='xmlExpNodePtr'/>
<variable name='htmlDefaultSAXHandler' file='globals' type='xmlSAXHandlerV1'/>
<variable name='oldXMLWDcompatibility' file='globals' type='int'/>
<variable name='xmlBufferAllocScheme' file='globals' type='xmlBufferAllocationScheme'/>
@@ -7963,6 +8163,17 @@ actually an xmlCharEncoding'/>
<arg name='from' type='xmlAutomataStatePtr' info='the starting point of the transition'/>
<arg name='to' type='xmlAutomataStatePtr' info='the target point of the transition or NULL'/>
</function>
+ <function name='xmlAutomataNewNegTrans' file='xmlautomata' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_AUTOMATA_ENABLED)</cond>
+ <info>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 any value except (@token,@token2) Note that if @token2 is not NULL, then (X, NULL) won&apos;t match to follow # the semantic of XSD ##other</info>
+ <return type='xmlAutomataStatePtr' info='the target state or NULL in case of error'/>
+ <arg name='am' type='xmlAutomataPtr' info='an automata'/>
+ <arg name='from' type='xmlAutomataStatePtr' info='the starting point of the transition'/>
+ <arg name='to' type='xmlAutomataStatePtr' info='the target point of the transition or NULL'/>
+ <arg name='token' type='const xmlChar *' info='the first input string associated to that transition'/>
+ <arg name='token2' type='const xmlChar *' info='the second input string associated to that transition'/>
+ <arg name='data' type='void *' info='data passed to the callback function if the transition is activated'/>
+ </function>
<function name='xmlAutomataNewOnceTrans' file='xmlautomata' module='xmlregexp'>
<cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_AUTOMATA_ENABLED)</cond>
<info>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 whose number is between @min and @max, moreover that transition can only be crossed once.</info>
@@ -9123,6 +9334,146 @@ actually an xmlCharEncoding'/>
<arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
<arg name='extra' type='const char *' info='extra informations'/>
</function>
+ <function name='xmlExpCtxtNbCons' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Debugging facility provides the number of allocated nodes over lifetime</info>
+ <return type='int' info='the number of nodes ever allocated or -1 in case of error'/>
+ <arg name='ctxt' type='xmlExpCtxtPtr' info='an expression context'/>
+ </function>
+ <function name='xmlExpCtxtNbNodes' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Debugging facility provides the number of allocated nodes at a that point</info>
+ <return type='int' info='the number of nodes in use or -1 in case of error'/>
+ <arg name='ctxt' type='xmlExpCtxtPtr' info='an expression context'/>
+ </function>
+ <function name='xmlExpDump' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Serialize the expression as compiled to the buffer</info>
+ <return type='void'/>
+ <arg name='buf' type='xmlBufferPtr' info='a buffer to receive the output'/>
+ <arg name='expr' type='xmlExpNodePtr' info='the compiled expression'/>
+ </function>
+ <function name='xmlExpExpDerive' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Evaluates the expression resulting from @exp consuming a sub expression @sub Based on algebraic derivation and sometimes direct Brzozowski derivation it usually tatkes less than linear time and can handle expressions generating infinite languages.</info>
+ <return type='xmlExpNodePtr' info='the resulting expression or NULL in case of internal error, the result must be freed'/>
+ <arg name='ctxt' type='xmlExpCtxtPtr' info='the expressions context'/>
+ <arg name='exp' type='xmlExpNodePtr' info='the englobing expression'/>
+ <arg name='sub' type='xmlExpNodePtr' info='the subexpression'/>
+ </function>
+ <function name='xmlExpFree' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Dereference the expression</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
+ <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
+ </function>
+ <function name='xmlExpFreeCtxt' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Free an expression context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlExpCtxtPtr' info='an expression context'/>
+ </function>
+ <function name='xmlExpGetLanguage' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Find all the strings used in @exp and store them in @list</info>
+ <return type='int' info='the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings'/>
+ <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
+ <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
+ <arg name='list' type='const xmlChar **' info='where to store the tokens'/>
+ <arg name='len' type='int' info='the allocated lenght of @list'/>
+ </function>
+ <function name='xmlExpGetStart' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>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]</info>
+ <return type='int' info='the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings'/>
+ <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
+ <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
+ <arg name='list' type='const xmlChar **' info='where to store the tokens'/>
+ <arg name='len' type='int' info='the allocated lenght of @list'/>
+ </function>
+ <function name='xmlExpIsNillable' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Finds if the expression is nillable, i.e. if it accepts the empty sequqnce</info>
+ <return type='int' info='1 if nillable, 0 if not and -1 in case of error'/>
+ <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
+ </function>
+ <function name='xmlExpMaxToken' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Indicate the maximum number of input a expression can accept</info>
+ <return type='int' info='the maximum length or -1 in case of error'/>
+ <arg name='expr' type='xmlExpNodePtr' info='a compiled expression'/>
+ </function>
+ <function name='xmlExpNewAtom' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Get the atom associated to this name from that context</info>
+ <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);'/>
+ </function>
+ <function name='xmlExpNewCtxt' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Creates a new context for manipulating expressions</info>
+ <return type='xmlExpCtxtPtr' info='the context or NULL in case of error'/>
+ <arg name='maxNodes' type='int' info='the maximum number of nodes'/>
+ <arg name='dict' type='xmlDictPtr' info='optional dictionnary to use internally'/>
+ </function>
+ <function name='xmlExpNewOr' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>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).</info>
+ <return type='xmlExpNodePtr' info='the node or NULL in case of error'/>
+ <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
+ <arg name='left' type='xmlExpNodePtr' info='left expression'/>
+ <arg name='right' type='xmlExpNodePtr' info='right expression'/>
+ </function>
+ <function name='xmlExpNewRange' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Get the atom associated to the range (@subset){@min, @max} Note that @subset is consumed in the operation, to keep an handle on it use xmlExpRef() and use xmlExpFree() to release it, this is true even in case of failure (unless ctxt == NULL).</info>
+ <return type='xmlExpNodePtr' info='the node or NULL in case of error'/>
+ <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
+ <arg name='subset' type='xmlExpNodePtr' info='the expression to be repeated'/>
+ <arg name='min' type='int' info='the lower bound for the repetition'/>
+ <arg name='max' type='int' info='the upper bound for the repetition, -1 means infinite'/>
+ </function>
+ <function name='xmlExpNewSeq' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Get the atom associated to the sequence @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).</info>
+ <return type='xmlExpNodePtr' info='the node or NULL in case of error'/>
+ <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
+ <arg name='left' type='xmlExpNodePtr' info='left expression'/>
+ <arg name='right' type='xmlExpNodePtr' info='right expression'/>
+ </function>
+ <function name='xmlExpParse' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Minimal parser for regexps, it understand the following constructs - string terminals - choice operator | - sequence operator , - subexpressions (...) - usual cardinality operators + * and ? - finite sequences { min, max } - infinite sequences { min, * } There is minimal checkings made especially no checking on strings values</info>
+ <return type='xmlExpNodePtr' info='a new expression or NULL in case of failure'/>
+ <arg name='ctxt' type='xmlExpCtxtPtr' info='the expressions context'/>
+ <arg name='expr' type='const char *' info='the 0 terminated string'/>
+ </function>
+ <function name='xmlExpRef' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Increase the reference count of the expression</info>
+ <return type='void'/>
+ <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
+ </function>
+ <function name='xmlExpStringDerive' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Do one step of Brzozowski derivation of the expression @exp with respect to the input string</info>
+ <return type='xmlExpNodePtr' info='the resulting expression or NULL in case of internal error'/>
+ <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
+ <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
+ <arg name='str' type='const xmlChar *' info='the string'/>
+ <arg name='len' type='int' info='the string len in bytes if available'/>
+ </function>
+ <function name='xmlExpSubsume' file='xmlregexp' module='xmlregexp'>
+ <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+ <info>Check whether @exp accepts all the languages accexpted by @sub the input being a subexpression.</info>
+ <return type='int' info='1 if true 0 if false and -1 in case of failure.'/>
+ <arg name='ctxt' type='xmlExpCtxtPtr' info='the expressions context'/>
+ <arg name='exp' type='xmlExpNodePtr' info='the englobing expression'/>
+ <arg name='sub' type='xmlExpNodePtr' info='the subexpression'/>
+ </function>
<functype name='xmlExternalEntityLoader' file='parser' module='parser'>
<info>External entity loaders types.</info>
<return type='xmlParserInputPtr' info='the entity input parser.'/>
@@ -9539,6 +9890,11 @@ actually an xmlCharEncoding'/>
<arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
<arg name='entity' type='xmlEntityPtr' info='an XML entity pointer.'/>
</function>
+ <function name='xmlHasFeature' file='parser' module='parser'>
+ <info>Examines if the library has been compiled with a given feature.</info>
+ <return type='int' info='a non-zero value if the feature exist, otherwise zero. Returns zero (0) if the feature does not exist or an unknown unknown feature is requested, non-zero otherwise.'/>
+ <arg name='feature' type='xmlFeature' info='the feature to be examined'/>
+ </function>
<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.'/>
@@ -10171,7 +10527,7 @@ actually an xmlCharEncoding'/>
<arg name='pathss' type='const char *' info='a list of directories separated by a colon or a space.'/>
</function>
<function name='xmlLoadExternalEntity' file='parser' module='xmlIO'>
- <info>Load an external entity, note that the use of this function for unparsed entities may generate problems TODO: a more generic External entity API must be designed</info>
+ <info>Load an external entity, note that the use of this function for unparsed entities may generate problems</info>
<return type='xmlParserInputPtr' info='the xmlParserInputPtr or NULL'/>
<arg name='URL' type='const char *' info='the URL for the entity to load'/>
<arg name='ID' type='const char *' info='the Public ID for the entity to load'/>
@@ -11530,6 +11886,12 @@ actually an xmlCharEncoding'/>
<return type='xmlURIPtr' info='a newly built xmlURIPtr or NULL in case of error'/>
<arg name='str' type='const char *' info='the URI string to analyze'/>
</function>
+ <function name='xmlParseURIRaw' file='uri' module='uri'>
+ <info>Parse an URI but allows to keep intact the original fragments. URI-reference = [ absoluteURI | relativeURI ] [ &quot;#&quot; fragment ]</info>
+ <return type='xmlURIPtr' info='a newly built xmlURIPtr or NULL in case of error'/>
+ <arg name='str' type='const char *' info='the URI string to analyze'/>
+ <arg name='raw' type='int' info='if 1 unescaping of URI pieces are disabled'/>
+ </function>
<function name='xmlParseURIReference' file='uri' module='uri'>
<info>Parse an URI reference string and fills in the appropriate fields of the @uri structure URI-reference = [ absoluteURI | relativeURI ] [ &quot;#&quot; fragment ]</info>
<return type='int' info='0 or the error code'/>
@@ -11740,6 +12102,12 @@ actually an xmlCharEncoding'/>
<return type='int' info='-2 if no limit (using //), otherwise the depth, and -1 in case of error'/>
<arg name='comp' type='xmlPatternPtr' info='the precompiled pattern'/>
</function>
+ <function name='xmlPatternMinDepth' file='pattern' module='pattern'>
+ <cond>defined(LIBXML_PATTERN_ENABLED)</cond>
+ <info>Check the minimum depth reachable by a pattern, 0 mean the / or . are part of the set.</info>
+ <return type='int' info='-1 in case of error otherwise the depth,'/>
+ <arg name='comp' type='xmlPatternPtr' info='the precompiled pattern'/>
+ </function>
<function name='xmlPatternStreamable' file='pattern' module='pattern'>
<cond>defined(LIBXML_PATTERN_ENABLED)</cond>
<info>Check if the pattern is streamable i.e. xmlPatternGetStreamCtxt() should work.</info>
@@ -11752,7 +12120,7 @@ actually an xmlCharEncoding'/>
<return type='xmlPatternPtr' info='the compiled form of the pattern or NULL in case of error'/>
<arg name='pattern' type='const xmlChar *' info='the pattern to compile'/>
<arg name='dict' type='xmlDict *' info='an optional dictionary for interned strings'/>
- <arg name='flags' type='xmlPatternFlags' info='compilation flags, undefined yet'/>
+ <arg name='flags' type='int' info='compilation flags, see xmlPatternFlags'/>
<arg name='namespaces' type='const xmlChar **' info='the prefix definitions, array of [URI, prefix] or NULL'/>
</function>
<function name='xmlPedanticParserDefault' file='parser' module='parserInternals'>
@@ -12233,6 +12601,14 @@ actually an xmlCharEncoding'/>
<arg name='warn' type='xmlRelaxNGValidityWarningFunc' info='the warning function'/>
<arg name='ctx' type='void *' info='the functions context'/>
</function>
+ <function name='xmlRelaxNGSetValidStructuredErrors' file='relaxng' module='relaxng'>
+ <cond>defined(LIBXML_SCHEMAS_ENABLED)</cond>
+ <info>Set the structured error callback</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlRelaxNGValidCtxtPtr' info='a Relax-NG validation context'/>
+ <arg name='serror' type='xmlStructuredErrorFunc' info='the structured error function'/>
+ <arg name='ctx' type='void *' info='the functions context'/>
+ </function>
<function name='xmlRelaxNGValidateDoc' file='relaxng' module='relaxng'>
<cond>defined(LIBXML_SCHEMAS_ENABLED)</cond>
<info>Validate a document tree in memory.</info>
@@ -12374,7 +12750,7 @@ actually an xmlCharEncoding'/>
<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)</cond>
+ <cond>defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_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)'/>
@@ -12526,7 +12902,7 @@ actually an xmlCharEncoding'/>
<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)</cond>
+ <cond>defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_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)'/>
@@ -13038,6 +13414,14 @@ actually an xmlCharEncoding'/>
<arg name='ctxt' type='xmlSchemaValidCtxtPtr' info='a schema validation context'/>
<arg name='options' type='int' info='a combination of xmlSchemaValidOption'/>
</function>
+ <function name='xmlSchemaSetValidStructuredErrors' file='xmlschemas' module='xmlschemas'>
+ <cond>defined(LIBXML_SCHEMAS_ENABLED)</cond>
+ <info>Set the structured error callback</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlSchemaValidCtxtPtr' info='a schema validation context'/>
+ <arg name='serror' type='xmlStructuredErrorFunc' info='the structured error function'/>
+ <arg name='ctx' type='void *' info='the functions context'/>
+ </function>
<function name='xmlSchemaValPredefTypeNode' file='xmlschemastypes' module='xmlschemastypes'>
<cond>defined(LIBXML_SCHEMAS_ENABLED)</cond>
<info>Check that a value conforms to the lexical space of the predefined type. if true a value is computed and returned in @val.</info>
@@ -13199,6 +13583,79 @@ actually an xmlCharEncoding'/>
<return type='xmlChar *' info='the new string or NULL if no change was required.'/>
<arg name='value' type='const xmlChar *' info='a value'/>
</function>
+ <function name='xmlSchematronFree' file='schematron' module='schematron'>
+ <cond>defined(LIBXML_SCHEMATRON_ENABLED)</cond>
+ <info>Deallocate a Schematron structure.</info>
+ <return type='void'/>
+ <arg name='schema' type='xmlSchematronPtr' info='a schema structure'/>
+ </function>
+ <function name='xmlSchematronFreeParserCtxt' file='schematron' module='schematron'>
+ <cond>defined(LIBXML_SCHEMATRON_ENABLED)</cond>
+ <info>Free the resources associated to the schema parser context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlSchematronParserCtxtPtr' info='the schema parser context'/>
+ </function>
+ <function name='xmlSchematronFreeValidCtxt' file='schematron' module='schematron'>
+ <cond>defined(LIBXML_SCHEMATRON_ENABLED)</cond>
+ <info>Free the resources associated to the schema validation context</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlSchematronValidCtxtPtr' info='the schema validation context'/>
+ </function>
+ <function name='xmlSchematronNewDocParserCtxt' file='schematron' module='schematron'>
+ <cond>defined(LIBXML_SCHEMATRON_ENABLED)</cond>
+ <info>Create an XML Schematrons parse context for that document. NB. The document may be modified during the parsing process.</info>
+ <return type='xmlSchematronParserCtxtPtr' info='the parser context or NULL in case of error'/>
+ <arg name='doc' type='xmlDocPtr' info='a preparsed document tree'/>
+ </function>
+ <function name='xmlSchematronNewMemParserCtxt' file='schematron' module='schematron'>
+ <cond>defined(LIBXML_SCHEMATRON_ENABLED)</cond>
+ <info>Create an XML Schematrons parse context for that memory buffer expected to contain an XML Schematrons file.</info>
+ <return type='xmlSchematronParserCtxtPtr' info='the parser context or NULL in case of error'/>
+ <arg name='buffer' type='const char *' info='a pointer to a char array containing the schemas'/>
+ <arg name='size' type='int' info='the size of the array'/>
+ </function>
+ <function name='xmlSchematronNewParserCtxt' file='schematron' module='schematron'>
+ <cond>defined(LIBXML_SCHEMATRON_ENABLED)</cond>
+ <info>Create an XML Schematrons parse context for that file/resource expected to contain an XML Schematrons file.</info>
+ <return type='xmlSchematronParserCtxtPtr' info='the parser context or NULL in case of error'/>
+ <arg name='URL' type='const char *' info='the location of the schema'/>
+ </function>
+ <function name='xmlSchematronNewValidCtxt' file='schematron' module='schematron'>
+ <cond>defined(LIBXML_SCHEMATRON_ENABLED)</cond>
+ <info>Create an XML Schematrons validation context based on the given schema.</info>
+ <return type='xmlSchematronValidCtxtPtr' info='the validation context or NULL in case of error'/>
+ <arg name='schema' type='xmlSchematronPtr' info='a precompiled XML Schematrons'/>
+ <arg name='options' type='int' info='a set of xmlSchematronValidOptions'/>
+ </function>
+ <function name='xmlSchematronParse' file='schematron' module='schematron'>
+ <cond>defined(LIBXML_SCHEMATRON_ENABLED)</cond>
+ <info>parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances.</info>
+ <return type='xmlSchematronPtr' info='the internal XML Schematron structure built from the resource or NULL in case of error'/>
+ <arg name='ctxt' type='xmlSchematronParserCtxtPtr' info='a schema validation context'/>
+ </function>
+ <function name='xmlSchematronValidateDoc' file='schematron' module='schematron'>
+ <cond>defined(LIBXML_SCHEMATRON_ENABLED)</cond>
+ <info>Validate a tree instance against the schematron</info>
+ <return type='int' info='0 in case of success, -1 in case of internal error and an error count otherwise.'/>
+ <arg name='ctxt' type='xmlSchematronValidCtxtPtr' info='the schema validation context'/>
+ <arg name='instance' type='xmlDocPtr' info='the document instace tree'/>
+ </function>
+ <functype name='xmlSchematronValidityErrorFunc' file='schematron' module='schematron'>
+ <cond>defined(LIBXML_SCHEMATRON_ENABLED)</cond>
+ <info></info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info=''/>
+ <arg name='msg' type='const char *' info=''/>
+ <arg name='...' type='...' info=''/>
+ </functype>
+ <functype name='xmlSchematronValidityWarningFunc' file='schematron' module='schematron'>
+ <cond>defined(LIBXML_SCHEMATRON_ENABLED)</cond>
+ <info></info>
+ <return type='void'/>
+ <arg name='ctx' type='void *' info=''/>
+ <arg name='msg' type='const char *' info=''/>
+ <arg name='...' type='...' info=''/>
+ </functype>
<function name='xmlSearchNs' file='tree' module='tree'>
<info>Search a Ns registered under a given name space for a document. recurse on the parents until it finds the defined namespace or return NULL otherwise. @nameSpace can be NULL, this is a search for the default namespace. We don&apos;t allow to cross entities boundaries. If you don&apos;t declare the namespace within those you will be in troubles !!! A warning is generated to cover this case.</info>
<return type='xmlNsPtr' info='the namespace pointer or NULL.'/>
@@ -13464,7 +13921,7 @@ actually an xmlCharEncoding'/>
</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'/>
+ <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'/>
<arg name='name' type='const xmlChar *' info='the full QName'/>
<arg name='len' type='int *' info='an int *'/>
</function>
diff --git a/doc/libxml2.xsa b/doc/libxml2.xsa
index e6e5ffe..f067bd4 100644
--- a/doc/libxml2.xsa
+++ b/doc/libxml2.xsa
@@ -8,27 +8,47 @@
</vendor>
<product id="libxml2">
<name>libxml2</name>
- <version>2.6.19</version>
- <last-release> Apr 02 2005</last-release>
+ <version>2.6.20</version>
+ <last-release> Jul 10 2005</last-release>
<info-url>http://xmlsoft.org/</info-url>
- <changes> - 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
- - bug fixes: schemas type decimal fixups (William Brack), xmmlint return
- code (Gerry Murphy), small schemas fixes (Matthew Burgess and
- GUY Fabrice), workaround "DAV:" namespace brokeness in c14n (Aleksey
- Sanin), segfault in Schemas (Kasimier Buchcik), Schemas attribute
- validation (Kasimier), Prop related functions and xmlNewNodeEatName
- (Rob Richards), HTML serialization of name attribute on a elements,
- Python error handlers leaks and improvement (Brent Hendricks),
- uninitialized variable in encoding code, Relax-NG validation bug,
- potential crash if gnorableWhitespace is NULL, xmlSAXParseDoc and
- xmlParseDoc signatures, switched back to assuming UTF-8 in case
- no encoding is given at serialization time
- - improvements: lot of work on Schemas by Kasimier Buchcik on facets
- checking and also mixed handling.
- -
+ <changes> - 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 of subset (Morten Welinder), IPv6/ss_family compilation
+ (William Brack), compilation when disabling parts of the library,
+ standalone test distribution.
+
+ - bug fixes: bug in lang(), memory cleanup on errors (William Brack),
+ HTTP query strings (Aron Stansvik), memory leak in DTD (William),
+ integer overflow in XPath (William), nanoftp buffer size, pattern
+ "." apth fixup (Kasimier), leak in tree reported by Malcolm Rowe,
+ replaceNode patch (Brent Hendricks), CDATA with NULL content
+ (Mark Vakoc), xml:base fixup on XInclude (William), pattern
+ fixes (William), attribute bug in exclusive c14n (Aleksey Sanin),
+ xml:space and xml:lang with SAX2 (Rob Richards), namespace
+ trouble in complex parsing (Malcolm Rowe), XSD type QNames fixes
+ (Kasimier), XPath streaming fixups (William), RelaxNG bug (Rob Richards),
+ Schemas for Schemas fixes (Kasimier), removal of ID (Rob Richards),
+ a small RelaxNG leak, HTML parsing in push mode bug (James Bursa),
+ failure to detect UTF-8 parsing bugs in CDATA sections, areBlanks()
+ heuristic failure, duplicate attributes in DTD bug (William).
+
+ - improvements: lot of work on Schemas by Kasimier Buchcik both on
+ conformance and streaming, Schemas validation messages (Kasimier
+ Buchcik, Matthew Burgess), namespace removal at the python level
+ (Brent Hendricks), Update to new Schemas regression tests from
+ W3C/Nist (Kasimier), xmlSchemaValidateFile() (Kasimier), implementation
+ of xmlTextReaderReadInnerXml and xmlTextReaderReadOuterXml (James Wert),
+ standalone test framework and programs, new DOM import APIs
+ xmlDOMWrapReconcileNamespaces() xmlDOMWrapAdoptNode() and
+ xmlDOMWrapRemoveNode(), extension of xmllint capabilities for
+ SAX and Schemas regression tests, xmlStopParser() available in
+ pull mode too, ienhancement to xmllint --shell namespaces support,
+ Windows port of the standalone testing tools (Kasimier and William),
+ xmlSchemaValidateStream() xmlSchemaSAXPlug() and xmlSchemaSAXUnplug()
+ SAX Schemas APIs, Schemas xmlReader support.
+
</changes>
</product>
diff --git a/doc/news.html b/doc/news.html
index 3d6a7b7..1db7042 100644
--- a/doc/news.html
+++ b/doc/news.html
@@ -12,7 +12,43 @@ 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://cvs.gnome.org/viewcvs/libxml2/">CVS</a> code base.</p><p>There is the list of public releases:</p><h3>2.6.20: Jul 10 2005</h3><ul><li> build fixes: Windows build (Rob Richards), Mingw compilation (Igor
+to the <a href="http://cvs.gnome.org/viewcvs/libxml2/">CVS</a> code base.</p><p>There is the list of public releases:</p><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 Python binary, use $GCC inestad of $CC = 'gcc' (Andrew
+ W. Nosenko), compilation/link with threads and old gcc, compile
+ problem by C370 on Z/OS, </li>
+ <li>bug fixes: http_proxy environments (Peter Breitenlohner), HTML UTF-8
+ bug (Jiri Netolicky), XPath NaN compare bug (William Brack),
+ htmlParseScript potential bug, Schemas regexp handling of spaces,
+ Base64 Schemas comparisons NIST passes, automata build error xsd:all,
+ xmlGetNodePath for namespaced attributes (Alexander Pohoyda),
+ xmlSchemas foreign namespaces handling, XML Schemas facet comparison
+ (Kupriyanov Anatolij), xmlSchemaPSimpleTypeErr error report (Kasimier
+ Buchcik), xml: namespace ahndling in Schemas (Kasimier), empty model
+ group in Schemas (Kasimier), wilcard in Schemas (Kasimier), URI
+ composition (William), xs:anyType in Schemas (Kasimier), Python resolver
+ emmitting error messages directly, Python xmlAttr.parent (Jakub Piotr
+ Clapa), trying to fix the file path/URI conversion,
+ xmlTextReaderGetAttribute fix (Rob Richards), xmlSchemaFreeAnnot memleak
+ (Kasimier), HTML UTF-8 serialization, streaming XPath, Schemas determinism
+ detection problem, XInclude bug, Schemas context type (Dean Hill),
+ validation fix (Derek Poon), xmlTextReaderGetAttribute[Ns] namespaces
+ (Rob Richards), Schemas type fix (Kuba Nowakowski), UTF-8 parser bug,
+ error in encoding handling, xmlGetLineNo fixes, bug on entities handling,
+ entity name extraction in error handling with XInclude, text nodes
+ in HTML body tags (Gary Coady), xml:id and IDness at the treee level
+ fixes, XPath streaming patterns bugs.</li>
+ <li>improvements: structured interfaces for schemas and RNG error reports
+ (Marcus Boerger), optimization of the char data inner loop parsing
+ (thanks to Behdad Esfahbod for the idea), schematron validation
+ though not finished yet, xmlSaveOption to omit XML declaration,
+ keyref match error reports (Kasimier), formal expression handling
+ code not plugged 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
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),
diff --git a/doc/xml.html b/doc/xml.html
index 7e6e476..90d28a3 100644
--- a/doc/xml.html
+++ b/doc/xml.html
@@ -670,6 +670,7 @@ href="http://xmlsoft.org/sources/win32/">win32</a> directory.</p>
binaries</a>.</li>
<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
@@ -715,6 +716,45 @@ to the <a href="http://cvs.gnome.org/viewcvs/libxml2/">CVS</a> code base.</p>
<p>There is the list of public releases:</p>
+<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 Python binary, use $GCC inestad of $CC = 'gcc' (Andrew
+ W. Nosenko), compilation/link with threads and old gcc, compile
+ problem by C370 on Z/OS, </li>
+ <li>bug fixes: http_proxy environments (Peter Breitenlohner), HTML UTF-8
+ bug (Jiri Netolicky), XPath NaN compare bug (William Brack),
+ htmlParseScript potential bug, Schemas regexp handling of spaces,
+ Base64 Schemas comparisons NIST passes, automata build error xsd:all,
+ xmlGetNodePath for namespaced attributes (Alexander Pohoyda),
+ xmlSchemas foreign namespaces handling, XML Schemas facet comparison
+ (Kupriyanov Anatolij), xmlSchemaPSimpleTypeErr error report (Kasimier
+ Buchcik), xml: namespace ahndling in Schemas (Kasimier), empty model
+ group in Schemas (Kasimier), wilcard in Schemas (Kasimier), URI
+ composition (William), xs:anyType in Schemas (Kasimier), Python resolver
+ emmitting error messages directly, Python xmlAttr.parent (Jakub Piotr
+ Clapa), trying to fix the file path/URI conversion,
+ xmlTextReaderGetAttribute fix (Rob Richards), xmlSchemaFreeAnnot memleak
+ (Kasimier), HTML UTF-8 serialization, streaming XPath, Schemas determinism
+ detection problem, XInclude bug, Schemas context type (Dean Hill),
+ validation fix (Derek Poon), xmlTextReaderGetAttribute[Ns] namespaces
+ (Rob Richards), Schemas type fix (Kuba Nowakowski), UTF-8 parser bug,
+ error in encoding handling, xmlGetLineNo fixes, bug on entities handling,
+ entity name extraction in error handling with XInclude, text nodes
+ in HTML body tags (Gary Coady), xml:id and IDness at the treee level
+ fixes, XPath streaming patterns bugs.</li>
+ <li>improvements: structured interfaces for schemas and RNG error reports
+ (Marcus Boerger), optimization of the char data inner loop parsing
+ (thanks to Behdad Esfahbod for the idea), schematron validation
+ though not finished yet, xmlSaveOption to omit XML declaration,
+ keyref match error reports (Kasimier), formal expression handling
+ code not plugged 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
@@ -2342,11 +2382,8 @@ HTML/textual output).</p>
<p>A separate library called libxslt is available implementing XSLT-1.0 for
libxml2. This module "libxslt" too can be found in the Gnome CVS base.</p>
-<p>You can check the <a
-href="http://cvs.gnome.org/lxr/source/libxslt/FEATURES">features</a>
-supported and the progresses on the <a
-href="http://cvs.gnome.org/lxr/source/libxslt/ChangeLog"
-name="Changelog">Changelog</a>.</p>
+<p>You can check the progresses on the libxslt <a
+href="http://xmlsoft.org/XSLT/ChangeLog.html">Changelog</a>.</p>
<h2><a name="Python">Python and bindings</a></h2>
diff --git a/doc/xmllint.1 b/doc/xmllint.1
index 0a49b85..db24d61 100644
--- a/doc/xmllint.1
+++ b/doc/xmllint.1
@@ -83,10 +83,6 @@ Suppress output\&. By default, xmllint outputs the result tree\&.
Do not use the Internet to fetch DTD's or entities\&.
.TP
-\fB\-\-nonet\fR
-Do not use the Internet to fetch DTD's or entities\&.
-
-.TP
\fB\-\-path\fR \fIpaths\fR
Use the list (separated by space or column) of filesystem path specified by \fIpaths\fR to load DTDs or entities \&.
diff --git a/doc/xmllint.xml b/doc/xmllint.xml
index dfc5d4b..904f43f 100644
--- a/doc/xmllint.xml
+++ b/doc/xmllint.xml
@@ -226,15 +226,6 @@
</varlistentry>
<varlistentry>
- <term><option>--nonet</option></term>
- <listitem>
- <simpara>
- Do not use the Internet to fetch DTD's or entities.
- </simpara>
- </listitem>
- </varlistentry>
-
- <varlistentry>
<term> <option>--path</option> <replaceable>paths</replaceable></term>
<listitem>
<simpara>
diff --git a/elfgcchack.h b/elfgcchack.h
index e2584c0..44ab139 100644
--- a/elfgcchack.h
+++ b/elfgcchack.h
@@ -36,6 +36,7 @@
#include "libxml/SAX2.h"
#include "libxml/SAX.h"
#include "libxml/schemasInternals.h"
+#include "libxml/schematron.h"
#include "libxml/threads.h"
#include "libxml/tree.h"
#include "libxml/uri.h"
@@ -1224,6 +1225,18 @@ extern __typeof (xmlAutomataNewEpsilon) xmlAutomataNewEpsilon__internal_alias __
#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
#ifdef bottom_xmlregexp
+#undef xmlAutomataNewNegTrans
+extern __typeof (xmlAutomataNewNegTrans) xmlAutomataNewNegTrans __attribute((alias("xmlAutomataNewNegTrans__internal_alias")));
+#else
+#ifndef xmlAutomataNewNegTrans
+extern __typeof (xmlAutomataNewNegTrans) xmlAutomataNewNegTrans__internal_alias __attribute((visibility("hidden")));
+#define xmlAutomataNewNegTrans xmlAutomataNewNegTrans__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
+#ifdef bottom_xmlregexp
#undef xmlAutomataNewOnceTrans
extern __typeof (xmlAutomataNewOnceTrans) xmlAutomataNewOnceTrans __attribute((alias("xmlAutomataNewOnceTrans__internal_alias")));
#else
@@ -3094,6 +3107,234 @@ extern __typeof (xmlErrMemory) xmlErrMemory__internal_alias __attribute((visibil
#endif
#endif
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpCtxtNbCons
+extern __typeof (xmlExpCtxtNbCons) xmlExpCtxtNbCons __attribute((alias("xmlExpCtxtNbCons__internal_alias")));
+#else
+#ifndef xmlExpCtxtNbCons
+extern __typeof (xmlExpCtxtNbCons) xmlExpCtxtNbCons__internal_alias __attribute((visibility("hidden")));
+#define xmlExpCtxtNbCons xmlExpCtxtNbCons__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpCtxtNbNodes
+extern __typeof (xmlExpCtxtNbNodes) xmlExpCtxtNbNodes __attribute((alias("xmlExpCtxtNbNodes__internal_alias")));
+#else
+#ifndef xmlExpCtxtNbNodes
+extern __typeof (xmlExpCtxtNbNodes) xmlExpCtxtNbNodes__internal_alias __attribute((visibility("hidden")));
+#define xmlExpCtxtNbNodes xmlExpCtxtNbNodes__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpDump
+extern __typeof (xmlExpDump) xmlExpDump __attribute((alias("xmlExpDump__internal_alias")));
+#else
+#ifndef xmlExpDump
+extern __typeof (xmlExpDump) xmlExpDump__internal_alias __attribute((visibility("hidden")));
+#define xmlExpDump xmlExpDump__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpExpDerive
+extern __typeof (xmlExpExpDerive) xmlExpExpDerive __attribute((alias("xmlExpExpDerive__internal_alias")));
+#else
+#ifndef xmlExpExpDerive
+extern __typeof (xmlExpExpDerive) xmlExpExpDerive__internal_alias __attribute((visibility("hidden")));
+#define xmlExpExpDerive xmlExpExpDerive__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpFree
+extern __typeof (xmlExpFree) xmlExpFree __attribute((alias("xmlExpFree__internal_alias")));
+#else
+#ifndef xmlExpFree
+extern __typeof (xmlExpFree) xmlExpFree__internal_alias __attribute((visibility("hidden")));
+#define xmlExpFree xmlExpFree__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpFreeCtxt
+extern __typeof (xmlExpFreeCtxt) xmlExpFreeCtxt __attribute((alias("xmlExpFreeCtxt__internal_alias")));
+#else
+#ifndef xmlExpFreeCtxt
+extern __typeof (xmlExpFreeCtxt) xmlExpFreeCtxt__internal_alias __attribute((visibility("hidden")));
+#define xmlExpFreeCtxt xmlExpFreeCtxt__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpGetLanguage
+extern __typeof (xmlExpGetLanguage) xmlExpGetLanguage __attribute((alias("xmlExpGetLanguage__internal_alias")));
+#else
+#ifndef xmlExpGetLanguage
+extern __typeof (xmlExpGetLanguage) xmlExpGetLanguage__internal_alias __attribute((visibility("hidden")));
+#define xmlExpGetLanguage xmlExpGetLanguage__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpGetStart
+extern __typeof (xmlExpGetStart) xmlExpGetStart __attribute((alias("xmlExpGetStart__internal_alias")));
+#else
+#ifndef xmlExpGetStart
+extern __typeof (xmlExpGetStart) xmlExpGetStart__internal_alias __attribute((visibility("hidden")));
+#define xmlExpGetStart xmlExpGetStart__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpIsNillable
+extern __typeof (xmlExpIsNillable) xmlExpIsNillable __attribute((alias("xmlExpIsNillable__internal_alias")));
+#else
+#ifndef xmlExpIsNillable
+extern __typeof (xmlExpIsNillable) xmlExpIsNillable__internal_alias __attribute((visibility("hidden")));
+#define xmlExpIsNillable xmlExpIsNillable__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpMaxToken
+extern __typeof (xmlExpMaxToken) xmlExpMaxToken __attribute((alias("xmlExpMaxToken__internal_alias")));
+#else
+#ifndef xmlExpMaxToken
+extern __typeof (xmlExpMaxToken) xmlExpMaxToken__internal_alias __attribute((visibility("hidden")));
+#define xmlExpMaxToken xmlExpMaxToken__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpNewAtom
+extern __typeof (xmlExpNewAtom) xmlExpNewAtom __attribute((alias("xmlExpNewAtom__internal_alias")));
+#else
+#ifndef xmlExpNewAtom
+extern __typeof (xmlExpNewAtom) xmlExpNewAtom__internal_alias __attribute((visibility("hidden")));
+#define xmlExpNewAtom xmlExpNewAtom__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpNewCtxt
+extern __typeof (xmlExpNewCtxt) xmlExpNewCtxt __attribute((alias("xmlExpNewCtxt__internal_alias")));
+#else
+#ifndef xmlExpNewCtxt
+extern __typeof (xmlExpNewCtxt) xmlExpNewCtxt__internal_alias __attribute((visibility("hidden")));
+#define xmlExpNewCtxt xmlExpNewCtxt__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpNewOr
+extern __typeof (xmlExpNewOr) xmlExpNewOr __attribute((alias("xmlExpNewOr__internal_alias")));
+#else
+#ifndef xmlExpNewOr
+extern __typeof (xmlExpNewOr) xmlExpNewOr__internal_alias __attribute((visibility("hidden")));
+#define xmlExpNewOr xmlExpNewOr__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpNewRange
+extern __typeof (xmlExpNewRange) xmlExpNewRange __attribute((alias("xmlExpNewRange__internal_alias")));
+#else
+#ifndef xmlExpNewRange
+extern __typeof (xmlExpNewRange) xmlExpNewRange__internal_alias __attribute((visibility("hidden")));
+#define xmlExpNewRange xmlExpNewRange__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpNewSeq
+extern __typeof (xmlExpNewSeq) xmlExpNewSeq __attribute((alias("xmlExpNewSeq__internal_alias")));
+#else
+#ifndef xmlExpNewSeq
+extern __typeof (xmlExpNewSeq) xmlExpNewSeq__internal_alias __attribute((visibility("hidden")));
+#define xmlExpNewSeq xmlExpNewSeq__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpParse
+extern __typeof (xmlExpParse) xmlExpParse __attribute((alias("xmlExpParse__internal_alias")));
+#else
+#ifndef xmlExpParse
+extern __typeof (xmlExpParse) xmlExpParse__internal_alias __attribute((visibility("hidden")));
+#define xmlExpParse xmlExpParse__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpRef
+extern __typeof (xmlExpRef) xmlExpRef __attribute((alias("xmlExpRef__internal_alias")));
+#else
+#ifndef xmlExpRef
+extern __typeof (xmlExpRef) xmlExpRef__internal_alias __attribute((visibility("hidden")));
+#define xmlExpRef xmlExpRef__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpStringDerive
+extern __typeof (xmlExpStringDerive) xmlExpStringDerive __attribute((alias("xmlExpStringDerive__internal_alias")));
+#else
+#ifndef xmlExpStringDerive
+extern __typeof (xmlExpStringDerive) xmlExpStringDerive__internal_alias __attribute((visibility("hidden")));
+#define xmlExpStringDerive xmlExpStringDerive__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpSubsume
+extern __typeof (xmlExpSubsume) xmlExpSubsume __attribute((alias("xmlExpSubsume__internal_alias")));
+#else
+#ifndef xmlExpSubsume
+extern __typeof (xmlExpSubsume) xmlExpSubsume__internal_alias __attribute((visibility("hidden")));
+#define xmlExpSubsume xmlExpSubsume__internal_alias
+#endif
+#endif
+#endif
+
#ifdef bottom_xmlIO
#undef xmlFileClose
extern __typeof (xmlFileClose) xmlFileClose __attribute((alias("xmlFileClose__internal_alias")));
@@ -3830,6 +4071,16 @@ extern __typeof (xmlHandleEntity) xmlHandleEntity__internal_alias __attribute((v
#endif
#endif
+#ifdef bottom_parser
+#undef xmlHasFeature
+extern __typeof (xmlHasFeature) xmlHasFeature __attribute((alias("xmlHasFeature__internal_alias")));
+#else
+#ifndef xmlHasFeature
+extern __typeof (xmlHasFeature) xmlHasFeature__internal_alias __attribute((visibility("hidden")));
+#define xmlHasFeature xmlHasFeature__internal_alias
+#endif
+#endif
+
#ifdef bottom_tree
#undef xmlHasNsProp
extern __typeof (xmlHasNsProp) xmlHasNsProp __attribute((alias("xmlHasNsProp__internal_alias")));
@@ -7047,6 +7298,16 @@ extern __typeof (xmlParseURI) xmlParseURI__internal_alias __attribute((visibilit
#endif
#ifdef bottom_uri
+#undef xmlParseURIRaw
+extern __typeof (xmlParseURIRaw) xmlParseURIRaw __attribute((alias("xmlParseURIRaw__internal_alias")));
+#else
+#ifndef xmlParseURIRaw
+extern __typeof (xmlParseURIRaw) xmlParseURIRaw__internal_alias __attribute((visibility("hidden")));
+#define xmlParseURIRaw xmlParseURIRaw__internal_alias
+#endif
+#endif
+
+#ifdef bottom_uri
#undef xmlParseURIReference
extern __typeof (xmlParseURIReference) xmlParseURIReference __attribute((alias("xmlParseURIReference__internal_alias")));
#else
@@ -7388,6 +7649,18 @@ extern __typeof (xmlPatternMaxDepth) xmlPatternMaxDepth__internal_alias __attrib
#if defined(LIBXML_PATTERN_ENABLED)
#ifdef bottom_pattern
+#undef xmlPatternMinDepth
+extern __typeof (xmlPatternMinDepth) xmlPatternMinDepth __attribute((alias("xmlPatternMinDepth__internal_alias")));
+#else
+#ifndef xmlPatternMinDepth
+extern __typeof (xmlPatternMinDepth) xmlPatternMinDepth__internal_alias __attribute((visibility("hidden")));
+#define xmlPatternMinDepth xmlPatternMinDepth__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_PATTERN_ENABLED)
+#ifdef bottom_pattern
#undef xmlPatternStreamable
extern __typeof (xmlPatternStreamable) xmlPatternStreamable __attribute((alias("xmlPatternStreamable__internal_alias")));
#else
@@ -8134,6 +8407,18 @@ extern __typeof (xmlRelaxNGSetValidErrors) xmlRelaxNGSetValidErrors__internal_al
#if defined(LIBXML_SCHEMAS_ENABLED)
#ifdef bottom_relaxng
+#undef xmlRelaxNGSetValidStructuredErrors
+extern __typeof (xmlRelaxNGSetValidStructuredErrors) xmlRelaxNGSetValidStructuredErrors __attribute((alias("xmlRelaxNGSetValidStructuredErrors__internal_alias")));
+#else
+#ifndef xmlRelaxNGSetValidStructuredErrors
+extern __typeof (xmlRelaxNGSetValidStructuredErrors) xmlRelaxNGSetValidStructuredErrors__internal_alias __attribute((visibility("hidden")));
+#define xmlRelaxNGSetValidStructuredErrors xmlRelaxNGSetValidStructuredErrors__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMAS_ENABLED)
+#ifdef bottom_relaxng
#undef xmlRelaxNGValidateDoc
extern __typeof (xmlRelaxNGValidateDoc) xmlRelaxNGValidateDoc __attribute((alias("xmlRelaxNGValidateDoc__internal_alias")));
#else
@@ -8328,7 +8613,7 @@ extern __typeof (xmlSAX2EndDocument) xmlSAX2EndDocument__internal_alias __attrib
#endif
#endif
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED)
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
#ifdef bottom_SAX2
#undef xmlSAX2EndElement
extern __typeof (xmlSAX2EndElement) xmlSAX2EndElement __attribute((alias("xmlSAX2EndElement__internal_alias")));
@@ -8574,7 +8859,7 @@ extern __typeof (xmlSAX2StartDocument) xmlSAX2StartDocument__internal_alias __at
#endif
#endif
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED)
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
#ifdef bottom_SAX2
#undef xmlSAX2StartElement
extern __typeof (xmlSAX2StartElement) xmlSAX2StartElement __attribute((alias("xmlSAX2StartElement__internal_alias")));
@@ -9240,6 +9525,18 @@ extern __typeof (xmlSchemaIsBuiltInTypeFacet) xmlSchemaIsBuiltInTypeFacet__inter
#if defined(LIBXML_SCHEMAS_ENABLED)
#ifdef bottom_xmlschemas
+#undef xmlSchemaIsValid
+extern __typeof (xmlSchemaIsValid) xmlSchemaIsValid __attribute((alias("xmlSchemaIsValid__internal_alias")));
+#else
+#ifndef xmlSchemaIsValid
+extern __typeof (xmlSchemaIsValid) xmlSchemaIsValid__internal_alias __attribute((visibility("hidden")));
+#define xmlSchemaIsValid xmlSchemaIsValid__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMAS_ENABLED)
+#ifdef bottom_xmlschemas
#undef xmlSchemaNewDocParserCtxt
extern __typeof (xmlSchemaNewDocParserCtxt) xmlSchemaNewDocParserCtxt __attribute((alias("xmlSchemaNewDocParserCtxt__internal_alias")));
#else
@@ -9348,6 +9645,30 @@ extern __typeof (xmlSchemaParse) xmlSchemaParse__internal_alias __attribute((vis
#if defined(LIBXML_SCHEMAS_ENABLED)
#ifdef bottom_xmlschemas
+#undef xmlSchemaSAXPlug
+extern __typeof (xmlSchemaSAXPlug) xmlSchemaSAXPlug __attribute((alias("xmlSchemaSAXPlug__internal_alias")));
+#else
+#ifndef xmlSchemaSAXPlug
+extern __typeof (xmlSchemaSAXPlug) xmlSchemaSAXPlug__internal_alias __attribute((visibility("hidden")));
+#define xmlSchemaSAXPlug xmlSchemaSAXPlug__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMAS_ENABLED)
+#ifdef bottom_xmlschemas
+#undef xmlSchemaSAXUnplug
+extern __typeof (xmlSchemaSAXUnplug) xmlSchemaSAXUnplug __attribute((alias("xmlSchemaSAXUnplug__internal_alias")));
+#else
+#ifndef xmlSchemaSAXUnplug
+extern __typeof (xmlSchemaSAXUnplug) xmlSchemaSAXUnplug__internal_alias __attribute((visibility("hidden")));
+#define xmlSchemaSAXUnplug xmlSchemaSAXUnplug__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMAS_ENABLED)
+#ifdef bottom_xmlschemas
#undef xmlSchemaSetParserErrors
extern __typeof (xmlSchemaSetParserErrors) xmlSchemaSetParserErrors __attribute((alias("xmlSchemaSetParserErrors__internal_alias")));
#else
@@ -9383,6 +9704,18 @@ extern __typeof (xmlSchemaSetValidOptions) xmlSchemaSetValidOptions__internal_al
#endif
#if defined(LIBXML_SCHEMAS_ENABLED)
+#ifdef bottom_xmlschemas
+#undef xmlSchemaSetValidStructuredErrors
+extern __typeof (xmlSchemaSetValidStructuredErrors) xmlSchemaSetValidStructuredErrors __attribute((alias("xmlSchemaSetValidStructuredErrors__internal_alias")));
+#else
+#ifndef xmlSchemaSetValidStructuredErrors
+extern __typeof (xmlSchemaSetValidStructuredErrors) xmlSchemaSetValidStructuredErrors__internal_alias __attribute((visibility("hidden")));
+#define xmlSchemaSetValidStructuredErrors xmlSchemaSetValidStructuredErrors__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMAS_ENABLED)
#ifdef bottom_xmlschemastypes
#undef xmlSchemaValPredefTypeNode
extern __typeof (xmlSchemaValPredefTypeNode) xmlSchemaValPredefTypeNode __attribute((alias("xmlSchemaValPredefTypeNode__internal_alias")));
@@ -9598,6 +9931,114 @@ extern __typeof (xmlSchemaWhiteSpaceReplace) xmlSchemaWhiteSpaceReplace__interna
#endif
#endif
+#if defined(LIBXML_SCHEMATRON_ENABLED)
+#ifdef bottom_schematron
+#undef xmlSchematronFree
+extern __typeof (xmlSchematronFree) xmlSchematronFree __attribute((alias("xmlSchematronFree__internal_alias")));
+#else
+#ifndef xmlSchematronFree
+extern __typeof (xmlSchematronFree) xmlSchematronFree__internal_alias __attribute((visibility("hidden")));
+#define xmlSchematronFree xmlSchematronFree__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMATRON_ENABLED)
+#ifdef bottom_schematron
+#undef xmlSchematronFreeParserCtxt
+extern __typeof (xmlSchematronFreeParserCtxt) xmlSchematronFreeParserCtxt __attribute((alias("xmlSchematronFreeParserCtxt__internal_alias")));
+#else
+#ifndef xmlSchematronFreeParserCtxt
+extern __typeof (xmlSchematronFreeParserCtxt) xmlSchematronFreeParserCtxt__internal_alias __attribute((visibility("hidden")));
+#define xmlSchematronFreeParserCtxt xmlSchematronFreeParserCtxt__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMATRON_ENABLED)
+#ifdef bottom_schematron
+#undef xmlSchematronFreeValidCtxt
+extern __typeof (xmlSchematronFreeValidCtxt) xmlSchematronFreeValidCtxt __attribute((alias("xmlSchematronFreeValidCtxt__internal_alias")));
+#else
+#ifndef xmlSchematronFreeValidCtxt
+extern __typeof (xmlSchematronFreeValidCtxt) xmlSchematronFreeValidCtxt__internal_alias __attribute((visibility("hidden")));
+#define xmlSchematronFreeValidCtxt xmlSchematronFreeValidCtxt__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMATRON_ENABLED)
+#ifdef bottom_schematron
+#undef xmlSchematronNewDocParserCtxt
+extern __typeof (xmlSchematronNewDocParserCtxt) xmlSchematronNewDocParserCtxt __attribute((alias("xmlSchematronNewDocParserCtxt__internal_alias")));
+#else
+#ifndef xmlSchematronNewDocParserCtxt
+extern __typeof (xmlSchematronNewDocParserCtxt) xmlSchematronNewDocParserCtxt__internal_alias __attribute((visibility("hidden")));
+#define xmlSchematronNewDocParserCtxt xmlSchematronNewDocParserCtxt__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMATRON_ENABLED)
+#ifdef bottom_schematron
+#undef xmlSchematronNewMemParserCtxt
+extern __typeof (xmlSchematronNewMemParserCtxt) xmlSchematronNewMemParserCtxt __attribute((alias("xmlSchematronNewMemParserCtxt__internal_alias")));
+#else
+#ifndef xmlSchematronNewMemParserCtxt
+extern __typeof (xmlSchematronNewMemParserCtxt) xmlSchematronNewMemParserCtxt__internal_alias __attribute((visibility("hidden")));
+#define xmlSchematronNewMemParserCtxt xmlSchematronNewMemParserCtxt__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMATRON_ENABLED)
+#ifdef bottom_schematron
+#undef xmlSchematronNewParserCtxt
+extern __typeof (xmlSchematronNewParserCtxt) xmlSchematronNewParserCtxt __attribute((alias("xmlSchematronNewParserCtxt__internal_alias")));
+#else
+#ifndef xmlSchematronNewParserCtxt
+extern __typeof (xmlSchematronNewParserCtxt) xmlSchematronNewParserCtxt__internal_alias __attribute((visibility("hidden")));
+#define xmlSchematronNewParserCtxt xmlSchematronNewParserCtxt__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMATRON_ENABLED)
+#ifdef bottom_schematron
+#undef xmlSchematronNewValidCtxt
+extern __typeof (xmlSchematronNewValidCtxt) xmlSchematronNewValidCtxt __attribute((alias("xmlSchematronNewValidCtxt__internal_alias")));
+#else
+#ifndef xmlSchematronNewValidCtxt
+extern __typeof (xmlSchematronNewValidCtxt) xmlSchematronNewValidCtxt__internal_alias __attribute((visibility("hidden")));
+#define xmlSchematronNewValidCtxt xmlSchematronNewValidCtxt__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMATRON_ENABLED)
+#ifdef bottom_schematron
+#undef xmlSchematronParse
+extern __typeof (xmlSchematronParse) xmlSchematronParse __attribute((alias("xmlSchematronParse__internal_alias")));
+#else
+#ifndef xmlSchematronParse
+extern __typeof (xmlSchematronParse) xmlSchematronParse__internal_alias __attribute((visibility("hidden")));
+#define xmlSchematronParse xmlSchematronParse__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMATRON_ENABLED)
+#ifdef bottom_schematron
+#undef xmlSchematronValidateDoc
+extern __typeof (xmlSchematronValidateDoc) xmlSchematronValidateDoc __attribute((alias("xmlSchematronValidateDoc__internal_alias")));
+#else
+#ifndef xmlSchematronValidateDoc
+extern __typeof (xmlSchematronValidateDoc) xmlSchematronValidateDoc__internal_alias __attribute((visibility("hidden")));
+#define xmlSchematronValidateDoc xmlSchematronValidateDoc__internal_alias
+#endif
+#endif
+#endif
+
#ifdef bottom_tree
#undef xmlSearchNs
extern __typeof (xmlSearchNs) xmlSearchNs __attribute((alias("xmlSearchNs__internal_alias")));
@@ -9998,7 +10439,6 @@ extern __typeof (xmlSprintfElementContent) xmlSprintfElementContent__internal_al
#endif
#endif
-#if defined(LIBXML_PUSH_ENABLED)
#ifdef bottom_parser
#undef xmlStopParser
extern __typeof (xmlStopParser) xmlStopParser __attribute((alias("xmlStopParser__internal_alias")));
@@ -10008,7 +10448,6 @@ extern __typeof (xmlStopParser) xmlStopParser__internal_alias __attribute((visib
#define xmlStopParser xmlStopParser__internal_alias
#endif
#endif
-#endif
#ifdef bottom_xmlstring
#undef xmlStrEqual
@@ -11056,6 +11495,18 @@ extern __typeof (xmlTextReaderRelaxNGValidate) xmlTextReaderRelaxNGValidate__int
#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
+#ifndef xmlTextReaderSchemaValidate
+extern __typeof (xmlTextReaderSchemaValidate) xmlTextReaderSchemaValidate__internal_alias __attribute((visibility("hidden")));
+#define xmlTextReaderSchemaValidate xmlTextReaderSchemaValidate__internal_alias
+#endif
+#endif
+#endif
+
#if defined(LIBXML_READER_ENABLED)
#ifdef bottom_xmlreader
#undef xmlTextReaderSetErrorHandler
@@ -11080,6 +11531,18 @@ extern __typeof (xmlTextReaderSetParserProp) xmlTextReaderSetParserProp__interna
#endif
#endif
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+#ifdef bottom_xmlreader
+#undef xmlTextReaderSetSchema
+extern __typeof (xmlTextReaderSetSchema) xmlTextReaderSetSchema __attribute((alias("xmlTextReaderSetSchema__internal_alias")));
+#else
+#ifndef xmlTextReaderSetSchema
+extern __typeof (xmlTextReaderSetSchema) xmlTextReaderSetSchema__internal_alias __attribute((visibility("hidden")));
+#define xmlTextReaderSetSchema xmlTextReaderSetSchema__internal_alias
+#endif
+#endif
+#endif
+
#if defined(LIBXML_READER_ENABLED)
#ifdef bottom_xmlreader
#undef xmlTextReaderSetStructuredErrorHandler
@@ -14484,7 +14947,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)
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED)
#ifdef bottom_tree
#undef xmlValidateNCName
extern __typeof (xmlValidateNCName) xmlValidateNCName __attribute((alias("xmlValidateNCName__internal_alias")));
diff --git a/encoding.c b/encoding.c
index 66e63b5..c6cfe91 100644
--- a/encoding.c
+++ b/encoding.c
@@ -70,6 +70,32 @@ static void xmlRegisterCharEncodingHandlersISO8859x (void);
static int xmlLittleEndian = 1;
+/**
+ * xmlEncodingErrMemory:
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlEncodingErrMemory(const char *extra)
+{
+ __xmlSimpleError(XML_FROM_I18N, XML_ERR_NO_MEMORY, NULL, NULL, extra);
+}
+
+/**
+ * xmlErrEncoding:
+ * @error: the error number
+ * @msg: the error message
+ *
+ * n encoding error
+ */
+static void
+xmlEncodingErr(xmlParserErrors error, const char *msg, const char *val)
+{
+ __xmlRaiseError(NULL, NULL, NULL, NULL, NULL,
+ XML_FROM_I18N, error, XML_ERR_FATAL,
+ NULL, 0, val, NULL, NULL, 0, 0, msg, val);
+}
/************************************************************************
* *
@@ -1239,7 +1265,7 @@ xmlNewCharEncodingHandler(const char *name,
const char *alias;
char upper[500];
int i;
- char *up = 0;
+ char *up = NULL;
/*
* Do the alias resolution
@@ -1252,8 +1278,8 @@ xmlNewCharEncodingHandler(const char *name,
* Keep only the uppercase version of the encoding.
*/
if (name == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewCharEncodingHandler : no name !\n");
+ xmlEncodingErr(XML_I18N_NO_NAME,
+ "xmlNewCharEncodingHandler : no name !\n", NULL);
return(NULL);
}
for (i = 0;i < 499;i++) {
@@ -1263,8 +1289,7 @@ xmlNewCharEncodingHandler(const char *name,
upper[i] = 0;
up = xmlMemStrdup(upper);
if (up == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewCharEncodingHandler : out of memory !\n");
+ xmlEncodingErrMemory("xmlNewCharEncodingHandler : out of memory !\n");
return(NULL);
}
@@ -1275,8 +1300,7 @@ xmlNewCharEncodingHandler(const char *name,
xmlMalloc(sizeof(xmlCharEncodingHandler));
if (handler == NULL) {
xmlFree(up);
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewCharEncodingHandler : out of memory !\n");
+ xmlEncodingErrMemory("xmlNewCharEncodingHandler : out of memory !\n");
return(NULL);
}
handler->input = input;
@@ -1319,12 +1343,13 @@ xmlInitCharEncodingHandlers(void) {
if (*ptr == 0x12) xmlLittleEndian = 0;
else if (*ptr == 0x34) xmlLittleEndian = 1;
- else xmlGenericError(xmlGenericErrorContext,
- "Odd problem at endianness detection\n");
+ else {
+ xmlEncodingErr(XML_ERR_INTERNAL_ERROR,
+ "Odd problem at endianness detection\n", NULL);
+ }
if (handlers == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlInitCharEncodingHandlers : out of memory !\n");
+ xmlEncodingErrMemory("xmlInitCharEncodingHandlers : out of memory !\n");
return;
}
xmlNewCharEncodingHandler("UTF-8", UTF8ToUTF8, UTF8ToUTF8);
@@ -1394,16 +1419,15 @@ void
xmlRegisterCharEncodingHandler(xmlCharEncodingHandlerPtr handler) {
if (handlers == NULL) xmlInitCharEncodingHandlers();
if (handler == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlRegisterCharEncodingHandler: NULL handler !\n");
+ xmlEncodingErr(XML_I18N_NO_HANDLER,
+ "xmlRegisterCharEncodingHandler: NULL handler !\n", NULL);
return;
}
if (nbCharEncodingHandler >= MAX_ENCODING_HANDLERS) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlRegisterCharEncodingHandler: Too many handler registered\n");
- xmlGenericError(xmlGenericErrorContext,
- "\tincrease MAX_ENCODING_HANDLERS : %s\n", __FILE__);
+ xmlEncodingErr(XML_I18N_EXCESS_HANDLER,
+ "xmlRegisterCharEncodingHandler: Too many handler registered, see %s\n",
+ "MAX_ENCODING_HANDLERS");
return;
}
handlers[nbCharEncodingHandler++] = handler;
@@ -1612,7 +1636,7 @@ xmlFindCharEncodingHandler(const char *name) {
#endif
return enc;
} else if ((icv_in != (iconv_t) -1) || icv_out != (iconv_t) -1) {
- xmlGenericError(xmlGenericErrorContext,
+ xmlEncodingErr(XML_ERR_INTERNAL_ERROR,
"iconv : problems with filters for '%s'\n", name);
}
#endif /* LIBXML_ICONV_ENABLED */
@@ -1878,20 +1902,24 @@ xmlCharEncInFunc(xmlCharEncodingHandler * handler, xmlBufferPtr out,
toconv, written, in->use);
#endif
break;
- case -2:
- xmlGenericError(xmlGenericErrorContext,
- "input conversion failed due to input error\n");
- xmlGenericError(xmlGenericErrorContext,
- "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
- in->content[0], in->content[1],
- in->content[2], in->content[3]);
+ case -2: {
+ char buf[50];
+
+ snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X",
+ in->content[0], in->content[1],
+ in->content[2], in->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 (written);
+ return (written? written : ret);
}
/**
@@ -1997,8 +2025,8 @@ retry:
}
#endif /* LIBXML_ICONV_ENABLED */
else {
- xmlGenericError(xmlGenericErrorContext,
- "xmlCharEncOutFunc: no output function !\n");
+ xmlEncodingErr(XML_I18N_NO_OUTPUT,
+ "xmlCharEncOutFunc: no output function !\n", NULL);
return(-1);
}
@@ -2049,18 +2077,21 @@ retry:
* and continue the transcoding phase, hoping the error
* did not mangle the encoder state.
*/
- snprintf((char *) charref, sizeof(charref), "&#%d;", cur);
+ snprintf((char *) &charref[0], sizeof(charref), "&#%d;", cur);
xmlBufferShrink(in, len);
xmlBufferAddHead(in, charref, -1);
goto retry;
} else {
- xmlGenericError(xmlGenericErrorContext,
- "output conversion failed due to conv error\n");
- xmlGenericError(xmlGenericErrorContext,
- "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
- in->content[0], in->content[1],
- in->content[2], in->content[3]);
+ char buf[50];
+
+ snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X",
+ in->content[0], in->content[1],
+ in->content[2], in->content[3]);
+ buf[49] = 0;
+ xmlEncodingErr(XML_I18N_CONV_FAILED,
+ "output conversion failed due to conv error, bytes %s\n",
+ buf);
in->content[0] = ' ';
}
break;
diff --git a/error.c b/error.c
index 17ced92..ce63071 100644
--- a/error.c
+++ b/error.c
@@ -16,7 +16,7 @@
#include <libxml/xmlmemory.h>
#include <libxml/globals.h>
-void xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED,
+void XMLCDECL xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED,
const char *msg,
...);
@@ -62,7 +62,7 @@ void xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED,
*
* Default handler for out of context error messages.
*/
-void
+void XMLCDECL
xmlGenericErrorDefaultFunc(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
va_list args;
@@ -354,6 +354,9 @@ xmlReportError(xmlErrorPtr err, xmlParserCtxtPtr ctxt, const char *str,
case XML_FROM_XSLT:
channel(data, "XSLT ");
break;
+ case XML_FROM_I18N:
+ channel(data, "encoding ");
+ break;
default:
break;
}
@@ -437,7 +440,7 @@ xmlReportError(xmlErrorPtr err, xmlParserCtxtPtr ctxt, const char *str,
* then forward the error message down the parser or generic
* error callback handler
*/
-void
+void XMLCDECL
__xmlRaiseError(xmlStructuredErrorFunc schannel,
xmlGenericErrorFunc channel, void *data, void *ctx,
void *nod, int domain, int code, xmlErrorLevel level,
@@ -514,7 +517,7 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel,
if ((node->doc != NULL) && (node->doc->URL != NULL)) {
baseptr = node;
- file = (const char *) node->doc->URL;
+/* file = (const char *) node->doc->URL; */
}
for (i = 0;
((i < 10) && (node != NULL) && (node->type != XML_ELEMENT_NODE));
@@ -560,10 +563,19 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel,
}
}
if (prev != NULL) {
- to->file = (char *) xmlGetProp(prev, BAD_CAST "href");
+ if (prev->type == XML_XINCLUDE_START) {
+ prev->type = XML_ELEMENT_NODE;
+ to->file = (char *) xmlGetProp(prev, BAD_CAST "href");
+ prev->type = XML_XINCLUDE_START;
+ } else {
+ to->file = (char *) xmlGetProp(prev, BAD_CAST "href");
+ }
} else
#endif
to->file = (char *) xmlStrdup(baseptr->doc->URL);
+ if ((to->file == NULL) && (node != NULL) && (node->doc != NULL)) {
+ to->file = (char *) xmlStrdup(node->doc->URL);
+ }
file = to->file;
}
to->line = line;
@@ -595,8 +607,10 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel,
schannel = xmlStructuredError;
else
channel = xmlGenericError;
+ if (!data) {
data = xmlGenericErrorContext;
}
+ }
if (schannel != NULL) {
schannel(data, to);
return;
@@ -655,7 +669,7 @@ __xmlSimpleError(int domain, int code, xmlNodePtr node,
* Display and format an error messages, gives file, line, position and
* extra parameters.
*/
-void
+void XMLCDECL
xmlParserError(void *ctx, const char *msg, ...)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
@@ -698,7 +712,7 @@ xmlParserError(void *ctx, const char *msg, ...)
* Display and format a warning messages, gives file, line, position and
* extra parameters.
*/
-void
+void XMLCDECL
xmlParserWarning(void *ctx, const char *msg, ...)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
@@ -747,7 +761,7 @@ xmlParserWarning(void *ctx, const char *msg, ...)
* Display and format an validity error messages, gives file,
* line, position and extra parameters.
*/
-void
+void XMLCDECL
xmlParserValidityError(void *ctx, const char *msg, ...)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
@@ -791,7 +805,7 @@ xmlParserValidityError(void *ctx, const char *msg, ...)
* Display and format a validity warning messages, gives file, line,
* position and extra parameters.
*/
-void
+void XMLCDECL
xmlParserValidityWarning(void *ctx, const char *msg, ...)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
diff --git a/example/Makefile.in b/example/Makefile.in
index 81a4f16..b97da80 100644
--- a/example/Makefile.in
+++ b/example/Makefile.in
@@ -174,6 +174,7 @@ TEST_PUSH = @TEST_PUSH@
TEST_REGEXPS = @TEST_REGEXPS@
TEST_SAX = @TEST_SAX@
TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_SCHEMATRON = @TEST_SCHEMATRON@
TEST_THREADS = @TEST_THREADS@
TEST_VALID = @TEST_VALID@
TEST_VTIME = @TEST_VTIME@
@@ -209,6 +210,7 @@ WITH_REGEXPS = @WITH_REGEXPS@
WITH_RUN_DEBUG = @WITH_RUN_DEBUG@
WITH_SAX1 = @WITH_SAX1@
WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_SCHEMATRON = @WITH_SCHEMATRON@
WITH_THREADS = @WITH_THREADS@
WITH_TREE = @WITH_TREE@
WITH_TRIO = @WITH_TRIO@
diff --git a/globals.c b/globals.c
index e4e4e4e..c104a1a 100644
--- a/globals.c
+++ b/globals.c
@@ -44,7 +44,7 @@ static xmlMutexPtr xmlThrDefMutex = NULL;
*
* Additional initialisation for multi-threading
*/
-void xmlInitGlobals()
+void xmlInitGlobals(void)
{
xmlThrDefMutex = xmlNewMutex();
}
@@ -54,7 +54,7 @@ void xmlInitGlobals()
*
* Additional cleanup for multi-threading
*/
-void xmlCleanupGlobals()
+void xmlCleanupGlobals(void)
{
if (xmlThrDefMutex != NULL) {
xmlFreeMutex(xmlThrDefMutex);
@@ -289,7 +289,7 @@ static xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValueThrDe
/* xmlGenericErrorFunc xmlGenericError = xmlGenericErrorDefaultFunc; */
/* Must initialize xmlGenericError in xmlInitParser */
-void xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED,
+void XMLCDECL xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED,
const char *msg,
...);
/**
@@ -344,7 +344,7 @@ static const char *xmlTreeIndentStringThrDef = " ";
* Disabled by default
*/
int xmlSaveNoEmptyTags = 0;
-int xmlSaveNoEmptyTagsThrDef = 0;
+static int xmlSaveNoEmptyTagsThrDef = 0;
#ifdef LIBXML_SAX1_ENABLED
/**
@@ -496,7 +496,7 @@ xmlInitializeGlobalState(xmlGlobalStatePtr gs)
xmlMutexLock(xmlThrDefMutex);
-#if defined(LIBXML_DOCB_ENABLED) && defined(LIBXML_LEGACY_ENABLED)
+#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)
diff --git a/include/Makefile.in b/include/Makefile.in
index 6c67be8..2ba891f 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -161,6 +161,7 @@ TEST_PUSH = @TEST_PUSH@
TEST_REGEXPS = @TEST_REGEXPS@
TEST_SAX = @TEST_SAX@
TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_SCHEMATRON = @TEST_SCHEMATRON@
TEST_THREADS = @TEST_THREADS@
TEST_VALID = @TEST_VALID@
TEST_VTIME = @TEST_VTIME@
@@ -196,6 +197,7 @@ WITH_REGEXPS = @WITH_REGEXPS@
WITH_RUN_DEBUG = @WITH_RUN_DEBUG@
WITH_SAX1 = @WITH_SAX1@
WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_SCHEMATRON = @WITH_SCHEMATRON@
WITH_THREADS = @WITH_THREADS@
WITH_TREE = @WITH_TREE@
WITH_TRIO = @WITH_TRIO@
diff --git a/include/libxml/HTMLparser.h b/include/libxml/HTMLparser.h
index 2604d86..8477efb 100644
--- a/include/libxml/HTMLparser.h
+++ b/include/libxml/HTMLparser.h
@@ -173,11 +173,13 @@ XMLPUBFUN void XMLCALL
* to the xmlReadDoc() and similar calls.
*/
typedef enum {
+ HTML_PARSE_RECOVER = 1<<0, /* Relaxed parsing */
HTML_PARSE_NOERROR = 1<<5, /* suppress error reports */
HTML_PARSE_NOWARNING= 1<<6, /* suppress warning reports */
HTML_PARSE_PEDANTIC = 1<<7, /* pedantic error reporting */
HTML_PARSE_NOBLANKS = 1<<8, /* remove blank nodes */
- HTML_PARSE_NONET = 1<<11 /* Forbid network access */
+ HTML_PARSE_NONET = 1<<11,/* Forbid network access */
+ HTML_PARSE_COMPACT = 1<<16 /* compact small text nodes */
} htmlParserOption;
XMLPUBFUN void XMLCALL
diff --git a/include/libxml/Makefile.am b/include/libxml/Makefile.am
index 03f9564..bf03a3b 100644
--- a/include/libxml/Makefile.am
+++ b/include/libxml/Makefile.am
@@ -48,7 +48,8 @@ xmlinc_HEADERS = \
xmlwriter.h \
chvalid.h \
pattern.h \
- xmlsave.h
+ xmlsave.h \
+ schematron.h
install-exec-hook:
$(mkinstalldirs) $(DESTDIR)$(xmlincdir)
diff --git a/include/libxml/Makefile.in b/include/libxml/Makefile.in
index bdcc706..f52f5b0 100644
--- a/include/libxml/Makefile.in
+++ b/include/libxml/Makefile.in
@@ -165,6 +165,7 @@ TEST_PUSH = @TEST_PUSH@
TEST_REGEXPS = @TEST_REGEXPS@
TEST_SAX = @TEST_SAX@
TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_SCHEMATRON = @TEST_SCHEMATRON@
TEST_THREADS = @TEST_THREADS@
TEST_VALID = @TEST_VALID@
TEST_VTIME = @TEST_VTIME@
@@ -200,6 +201,7 @@ WITH_REGEXPS = @WITH_REGEXPS@
WITH_RUN_DEBUG = @WITH_RUN_DEBUG@
WITH_SAX1 = @WITH_SAX1@
WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_SCHEMATRON = @WITH_SCHEMATRON@
WITH_THREADS = @WITH_THREADS@
WITH_TREE = @WITH_TREE@
WITH_TRIO = @WITH_TRIO@
@@ -316,7 +318,8 @@ xmlinc_HEADERS = \
xmlwriter.h \
chvalid.h \
pattern.h \
- xmlsave.h
+ xmlsave.h \
+ schematron.h
EXTRA_DIST = xmlversion.h.in
all: all-am
diff --git a/include/libxml/SAX2.h b/include/libxml/SAX2.h
index 6626564..8d2db02 100644
--- a/include/libxml/SAX2.h
+++ b/include/libxml/SAX2.h
@@ -98,7 +98,7 @@ XMLPUBFUN void XMLCALL
xmlSAX2StartDocument (void *ctx);
XMLPUBFUN void XMLCALL
xmlSAX2EndDocument (void *ctx);
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED)
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
XMLPUBFUN void XMLCALL
xmlSAX2StartElement (void *ctx,
const xmlChar *fullname,
diff --git a/include/libxml/parser.h b/include/libxml/parser.h
index 7203ca3..2fe91d4 100644
--- a/include/libxml/parser.h
+++ b/include/libxml/parser.h
@@ -591,7 +591,7 @@ typedef void (*cdataBlockSAXFunc) (
*
* Display and format a warning messages, callback.
*/
-typedef void (*warningSAXFunc) (void *ctx,
+typedef void (XMLCDECL *warningSAXFunc) (void *ctx,
const char *msg, ...);
/**
* errorSAXFunc:
@@ -601,7 +601,7 @@ typedef void (*warningSAXFunc) (void *ctx,
*
* Display and format an error messages, callback.
*/
-typedef void (*errorSAXFunc) (void *ctx,
+typedef void (XMLCDECL *errorSAXFunc) (void *ctx,
const char *msg, ...);
/**
* fatalErrorSAXFunc:
@@ -613,7 +613,7 @@ typedef void (*errorSAXFunc) (void *ctx,
* Note: so far fatalError() SAX callbacks are not used, error()
* get all the callbacks for errors.
*/
-typedef void (*fatalErrorSAXFunc) (void *ctx,
+typedef void (XMLCDECL *fatalErrorSAXFunc) (void *ctx,
const char *msg, ...);
/**
* isStandaloneSAXFunc:
@@ -1088,7 +1088,8 @@ typedef enum {
XML_PARSE_NODICT = 1<<12,/* Do not reuse the context dictionnary */
XML_PARSE_NSCLEAN = 1<<13,/* remove redundant namespaces declarations */
XML_PARSE_NOCDATA = 1<<14,/* merge CDATA as text nodes */
- XML_PARSE_NOXINCNODE= 1<<15 /* do not generate XINCLUDE START/END nodes */
+ XML_PARSE_NOXINCNODE= 1<<15,/* do not generate XINCLUDE START/END nodes */
+ XML_PARSE_COMPACT = 1<<16 /* compact small text nodes */
} xmlParserOption;
XMLPUBFUN void XMLCALL
@@ -1162,6 +1163,52 @@ XMLPUBFUN xmlDocPtr XMLCALL
const char *encoding,
int options);
+/*
+ * Library wide options
+ */
+/**
+ * xmlFeature:
+ *
+ * Used to examine the existance of features that can be enabled
+ * or disabled at compile-time.
+ */
+typedef enum {
+ XML_FEATURE_THREAD = 1,
+ XML_FEATURE_TREE = 2,
+ XML_FEATURE_OUTPUT = 3,
+ XML_FEATURE_PUSH = 4,
+ XML_FEATURE_READER = 5,
+ XML_FEATURE_PATTERN = 6,
+ XML_FEATURE_WRITER = 7,
+ XML_FEATURE_SAX1 = 8,
+ XML_FEATURE_FTP = 9,
+ XML_FEATURE_HTTP = 10,
+ XML_FEATURE_VALID = 11,
+ XML_FEATURE_HTML = 12,
+ XML_FEATURE_LEGACY = 13,
+ XML_FEATURE_C14N = 14,
+ XML_FEATURE_CATALOG = 15,
+ XML_FEATURE_XPATH = 16,
+ XML_FEATURE_XPTR = 17,
+ XML_FEATURE_XINCLUDE = 18,
+ XML_FEATURE_ICONV = 19,
+ XML_FEATURE_ISO8859X = 20,
+ XML_FEATURE_UNICODE = 21,
+ XML_FEATURE_REGEXP = 22,
+ XML_FEATURE_AUTOMATA = 23,
+ XML_FEATURE_EXPR = 24,
+ XML_FEATURE_SCHEMAS = 25,
+ XML_FEATURE_SCHEMATRON = 26,
+ XML_FEATURE_MODULES = 27,
+ XML_FEATURE_DEBUG = 28,
+ XML_FEATURE_DEBUG_MEM = 29,
+ XML_FEATURE_DEBUG_RUN = 30,
+ XML_FEATURE_NONE = 99999 /* just to be sure of allocation size */
+} xmlFeature;
+
+XMLPUBFUN int XMLCALL
+ xmlHasFeature (xmlFeature feature);
+
#ifdef __cplusplus
}
#endif
diff --git a/include/libxml/pattern.h b/include/libxml/pattern.h
index e3ee76d..1aa6704 100644
--- a/include/libxml/pattern.h
+++ b/include/libxml/pattern.h
@@ -52,7 +52,7 @@ XMLPUBFUN void XMLCALL
XMLPUBFUN xmlPatternPtr XMLCALL
xmlPatterncompile (const xmlChar *pattern,
xmlDict *dict,
- xmlPatternFlags flags,
+ int flags,
const xmlChar **namespaces);
XMLPUBFUN int XMLCALL
xmlPatternMatch (xmlPatternPtr comp,
@@ -67,6 +67,8 @@ XMLPUBFUN int XMLCALL
XMLPUBFUN int XMLCALL
xmlPatternMaxDepth (xmlPatternPtr comp);
XMLPUBFUN int XMLCALL
+ xmlPatternMinDepth (xmlPatternPtr comp);
+XMLPUBFUN int XMLCALL
xmlPatternFromRoot (xmlPatternPtr comp);
XMLPUBFUN xmlStreamCtxtPtr XMLCALL
xmlPatternGetStreamCtxt (xmlPatternPtr comp);
diff --git a/include/libxml/relaxng.h b/include/libxml/relaxng.h
index ca3c13b..c75aba2 100644
--- a/include/libxml/relaxng.h
+++ b/include/libxml/relaxng.h
@@ -27,8 +27,8 @@ typedef xmlRelaxNG *xmlRelaxNGPtr;
/**
* A schemas validation context
*/
-typedef void (*xmlRelaxNGValidityErrorFunc) (void *ctx, const char *msg, ...);
-typedef void (*xmlRelaxNGValidityWarningFunc) (void *ctx, const char *msg, ...);
+typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx, const char *msg, ...);
+typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx, const char *msg, ...);
typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt;
typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr;
@@ -152,6 +152,9 @@ XMLPUBFUN int XMLCALL
xmlRelaxNGValidityErrorFunc *err,
xmlRelaxNGValidityWarningFunc *warn,
void **ctx);
+XMLPUBFUN void XMLCALL
+ xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlStructuredErrorFunc serror, void *ctx);
XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL
xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema);
XMLPUBFUN void XMLCALL
diff --git a/include/libxml/schematron.h b/include/libxml/schematron.h
new file mode 100644
index 0000000..6eaa699
--- /dev/null
+++ b/include/libxml/schematron.h
@@ -0,0 +1,124 @@
+/*
+ * Summary: XML Schemastron implementation
+ * Description: interface to the XML Schematron validity checking.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SCHEMATRON_H__
+#define __XML_SCHEMATRON_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_SCHEMATRON_ENABLED
+
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ XML_SCHEMATRON_OUT_QUIET = 1 << 0, /* quiet no report */
+ XML_SCHEMATRON_OUT_TEXT = 1 << 1, /* build a textual report */
+ XML_SCHEMATRON_OUT_XML = 1 << 2, /* output SVRL */
+ XML_SCHEMATRON_OUT_FILE = 1 << 8, /* output to a file descriptor */
+ XML_SCHEMATRON_OUT_BUFFER = 1 << 9, /* output to a buffer */
+ XML_SCHEMATRON_OUT_IO = 1 << 10 /* output to I/O mechanism */
+} xmlSchematronValidOptions;
+
+/**
+ * The schemas related types are kept internal
+ */
+typedef struct _xmlSchematron xmlSchematron;
+typedef xmlSchematron *xmlSchematronPtr;
+
+/**
+ * A schemas validation context
+ */
+typedef void (*xmlSchematronValidityErrorFunc) (void *ctx, const char *msg, ...);
+typedef void (*xmlSchematronValidityWarningFunc) (void *ctx, const char *msg, ...);
+
+typedef struct _xmlSchematronParserCtxt xmlSchematronParserCtxt;
+typedef xmlSchematronParserCtxt *xmlSchematronParserCtxtPtr;
+
+typedef struct _xmlSchematronValidCtxt xmlSchematronValidCtxt;
+typedef xmlSchematronValidCtxt *xmlSchematronValidCtxtPtr;
+
+/*
+ * Interfaces for parsing.
+ */
+XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL
+ xmlSchematronNewParserCtxt (const char *URL);
+XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL
+ xmlSchematronNewMemParserCtxt(const char *buffer,
+ int size);
+XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL
+ xmlSchematronNewDocParserCtxt(xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+ xmlSchematronFreeParserCtxt (xmlSchematronParserCtxtPtr ctxt);
+/*****
+XMLPUBFUN void XMLCALL
+ xmlSchematronSetParserErrors(xmlSchematronParserCtxtPtr ctxt,
+ xmlSchematronValidityErrorFunc err,
+ xmlSchematronValidityWarningFunc warn,
+ void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlSchematronGetParserErrors(xmlSchematronParserCtxtPtr ctxt,
+ xmlSchematronValidityErrorFunc * err,
+ xmlSchematronValidityWarningFunc * warn,
+ void **ctx);
+XMLPUBFUN int XMLCALL
+ xmlSchematronIsValid (xmlSchematronValidCtxtPtr ctxt);
+ *****/
+XMLPUBFUN xmlSchematronPtr XMLCALL
+ xmlSchematronParse (xmlSchematronParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+ xmlSchematronFree (xmlSchematronPtr schema);
+/*
+ * Interfaces for validating
+ */
+/******
+XMLPUBFUN void XMLCALL
+ xmlSchematronSetValidStructuredErrors(
+ xmlSchematronValidCtxtPtr ctxt,
+ xmlStructuredErrorFunc serror,
+ void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlSchematronSetValidErrors (xmlSchematronValidCtxtPtr ctxt,
+ xmlSchematronValidityErrorFunc err,
+ xmlSchematronValidityWarningFunc warn,
+ void *ctx);
+XMLPUBFUN int XMLCALL
+ xmlSchematronGetValidErrors (xmlSchematronValidCtxtPtr ctxt,
+ xmlSchematronValidityErrorFunc *err,
+ xmlSchematronValidityWarningFunc *warn,
+ void **ctx);
+XMLPUBFUN int XMLCALL
+ xmlSchematronSetValidOptions(xmlSchematronValidCtxtPtr ctxt,
+ int options);
+XMLPUBFUN int XMLCALL
+ xmlSchematronValidCtxtGetOptions(xmlSchematronValidCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlSchematronValidateOneElement (xmlSchematronValidCtxtPtr ctxt,
+ xmlNodePtr elem);
+ *******/
+
+XMLPUBFUN xmlSchematronValidCtxtPtr XMLCALL
+ xmlSchematronNewValidCtxt (xmlSchematronPtr schema,
+ int options);
+XMLPUBFUN void XMLCALL
+ xmlSchematronFreeValidCtxt (xmlSchematronValidCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlSchematronValidateDoc (xmlSchematronValidCtxtPtr ctxt,
+ xmlDocPtr instance);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMATRON_ENABLED */
+#endif /* __XML_SCHEMATRON_H__ */
diff --git a/include/libxml/threads.h b/include/libxml/threads.h
index fb6b704..4f7d10f 100644
--- a/include/libxml/threads.h
+++ b/include/libxml/threads.h
@@ -36,7 +36,6 @@ typedef xmlRMutex *xmlRMutexPtr;
#ifdef __cplusplus
extern "C" {
#endif
-
XMLPUBFUN xmlMutexPtr XMLCALL
xmlNewMutex (void);
XMLPUBFUN void XMLCALL
diff --git a/include/libxml/tree.h b/include/libxml/tree.h
index d995e5c..bd62d0a 100644
--- a/include/libxml/tree.h
+++ b/include/libxml/tree.h
@@ -55,6 +55,33 @@ typedef xmlEntity *xmlEntityPtr;
#define BASE_BUFFER_SIZE 4096
/**
+ * 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.
+ */
+
+typedef enum {
+ XML_BUFFER_ALLOC_DOUBLEIT,
+ XML_BUFFER_ALLOC_EXACT,
+ XML_BUFFER_ALLOC_IMMUTABLE
+} xmlBufferAllocationScheme;
+
+/**
+ * xmlBuffer:
+ *
+ * A buffer structure.
+ */
+typedef struct _xmlBuffer xmlBuffer;
+typedef xmlBuffer *xmlBufferPtr;
+struct _xmlBuffer {
+ xmlChar *content; /* The buffer content UTF8 */
+ unsigned int use; /* The buffer size used */
+ unsigned int size; /* The buffer size */
+ xmlBufferAllocationScheme alloc; /* The realloc method */
+};
+
+/**
* XML_XML_NAMESPACE:
*
* This is the namespace for the special xml: prefix predefined in the
@@ -402,33 +429,6 @@ struct _xmlRef {
};
/**
- * 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.
- */
-
-typedef enum {
- XML_BUFFER_ALLOC_DOUBLEIT,
- XML_BUFFER_ALLOC_EXACT,
- XML_BUFFER_ALLOC_IMMUTABLE
-} xmlBufferAllocationScheme;
-
-/**
- * xmlBuffer:
- *
- * A buffer structure.
- */
-typedef struct _xmlBuffer xmlBuffer;
-typedef xmlBuffer *xmlBufferPtr;
-struct _xmlBuffer {
- xmlChar *content; /* The buffer content UTF8 */
- unsigned int use; /* The buffer size used */
- unsigned int size; /* The buffer size */
- xmlBufferAllocationScheme alloc; /* The realloc method */
-};
-
-/**
* xmlNode:
*
* A node in an XML tree.
diff --git a/include/libxml/uri.h b/include/libxml/uri.h
index 90ed06e..89e3653 100644
--- a/include/libxml/uri.h
+++ b/include/libxml/uri.h
@@ -47,13 +47,16 @@ struct _xmlURI {
XMLPUBFUN xmlURIPtr XMLCALL
xmlCreateURI (void);
XMLPUBFUN xmlChar * XMLCALL
- xmlBuildURI (const xmlChar *URI,
- const xmlChar *base);
+ xmlBuildURI (const xmlChar *URI,
+ const xmlChar *base);
XMLPUBFUN xmlChar * XMLCALL
xmlBuildRelativeURI (const xmlChar *URI,
- const xmlChar *base);
+ const xmlChar *base);
XMLPUBFUN xmlURIPtr XMLCALL
xmlParseURI (const char *str);
+XMLPUBFUN xmlURIPtr XMLCALL
+ xmlParseURIRaw (const char *str,
+ int raw);
XMLPUBFUN int XMLCALL
xmlParseURIReference (xmlURIPtr uri,
const char *str);
diff --git a/include/libxml/valid.h b/include/libxml/valid.h
index 86e3fce..d13e4eb 100644
--- a/include/libxml/valid.h
+++ b/include/libxml/valid.h
@@ -39,7 +39,7 @@ typedef xmlValidState *xmlValidStatePtr;
* Callback called when a validity error is found. This is a message
* oriented function similar to an *printf function.
*/
-typedef void (*xmlValidityErrorFunc) (void *ctx,
+typedef void (XMLCDECL *xmlValidityErrorFunc) (void *ctx,
const char *msg,
...);
@@ -54,7 +54,7 @@ typedef void (*xmlValidityErrorFunc) (void *ctx,
* Callback called when a validity warning is found. This is a message
* oriented function similar to an *printf function.
*/
-typedef void (*xmlValidityWarningFunc) (void *ctx,
+typedef void (XMLCDECL *xmlValidityWarningFunc) (void *ctx,
const char *msg,
...);
diff --git a/include/libxml/xmlIO.h b/include/libxml/xmlIO.h
index 0f7b8a8..e67b6e5 100644
--- a/include/libxml/xmlIO.h
+++ b/include/libxml/xmlIO.h
@@ -31,7 +31,7 @@ extern "C" {
*
* Returns 1 if yes and 0 if another Input module should be used
*/
-typedef int (*xmlInputMatchCallback) (char const *filename);
+typedef int (XMLCALL *xmlInputMatchCallback) (char const *filename);
/**
* xmlInputOpenCallback:
* @filename: the filename or URI
@@ -40,7 +40,7 @@ typedef int (*xmlInputMatchCallback) (char const *filename);
*
* Returns an Input context or NULL in case or error
*/
-typedef void * (*xmlInputOpenCallback) (char const *filename);
+typedef void * (XMLCALL *xmlInputOpenCallback) (char const *filename);
/**
* xmlInputReadCallback:
* @context: an Input context
@@ -51,7 +51,7 @@ typedef void * (*xmlInputOpenCallback) (char const *filename);
*
* Returns the number of bytes read or -1 in case of error
*/
-typedef int (*xmlInputReadCallback) (void * context, char * buffer, int len);
+typedef int (XMLCALL *xmlInputReadCallback) (void * context, char * buffer, int len);
/**
* xmlInputCloseCallback:
* @context: an Input context
@@ -60,7 +60,7 @@ typedef int (*xmlInputReadCallback) (void * context, char * buffer, int len);
*
* Returns 0 or -1 in case of error
*/
-typedef int (*xmlInputCloseCallback) (void * context);
+typedef int (XMLCALL *xmlInputCloseCallback) (void * context);
#ifdef LIBXML_OUTPUT_ENABLED
/*
@@ -77,7 +77,7 @@ typedef int (*xmlInputCloseCallback) (void * context);
*
* Returns 1 if yes and 0 if another Output module should be used
*/
-typedef int (*xmlOutputMatchCallback) (char const *filename);
+typedef int (XMLCALL *xmlOutputMatchCallback) (char const *filename);
/**
* xmlOutputOpenCallback:
* @filename: the filename or URI
@@ -86,7 +86,7 @@ typedef int (*xmlOutputMatchCallback) (char const *filename);
*
* Returns an Output context or NULL in case or error
*/
-typedef void * (*xmlOutputOpenCallback) (char const *filename);
+typedef void * (XMLCALL *xmlOutputOpenCallback) (char const *filename);
/**
* xmlOutputWriteCallback:
* @context: an Output context
@@ -97,7 +97,7 @@ typedef void * (*xmlOutputOpenCallback) (char const *filename);
*
* Returns the number of bytes written or -1 in case of error
*/
-typedef int (*xmlOutputWriteCallback) (void * context, const char * buffer,
+typedef int (XMLCALL *xmlOutputWriteCallback) (void * context, const char * buffer,
int len);
/**
* xmlOutputCloseCallback:
@@ -107,7 +107,7 @@ typedef int (*xmlOutputWriteCallback) (void * context, const char * buffer,
*
* Returns 0 or -1 in case of error
*/
-typedef int (*xmlOutputCloseCallback) (void * context);
+typedef int (XMLCALL *xmlOutputCloseCallback) (void * context);
#endif /* LIBXML_OUTPUT_ENABLED */
#ifdef __cplusplus
diff --git a/include/libxml/xmlautomata.h b/include/libxml/xmlautomata.h
index d29ddcf..f98b55e 100644
--- a/include/libxml/xmlautomata.h
+++ b/include/libxml/xmlautomata.h
@@ -65,6 +65,14 @@ XMLPUBFUN xmlAutomataStatePtr XMLCALL
const xmlChar *token,
const xmlChar *token2,
void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+ xmlAutomataNewNegTrans (xmlAutomataPtr am,
+ xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to,
+ const xmlChar *token,
+ const xmlChar *token2,
+ void *data);
+
XMLPUBFUN xmlAutomataStatePtr XMLCALL
xmlAutomataNewCountTrans (xmlAutomataPtr am,
xmlAutomataStatePtr from,
diff --git a/include/libxml/xmlerror.h b/include/libxml/xmlerror.h
index 04da1a6..cc35ca8 100644
--- a/include/libxml/xmlerror.h
+++ b/include/libxml/xmlerror.h
@@ -60,7 +60,8 @@ typedef enum {
XML_FROM_VALID, /* The XML DTD validation with valid context */
XML_FROM_CHECK, /* The error checking module */
XML_FROM_WRITER, /* The xmlwriter module */
- XML_FROM_MODULE /* The dynamically loaded module module*/
+ XML_FROM_MODULE, /* The dynamically loaded module module*/
+ XML_FROM_I18N /* The module handling character conversion */
} xmlErrorDomain;
/**
@@ -760,6 +761,7 @@ typedef enum {
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_MODULE_OPEN = 4900, /* 4900 */
XML_MODULE_CLOSE, /* 4901 */
XML_CHECK_FOUND_ELEMENT = 5000,
@@ -799,7 +801,12 @@ typedef enum {
XML_CHECK_NOT_NCNAME, /* 5034 */
XML_CHECK_OUTSIDE_DICT, /* 5035 */
XML_CHECK_WRONG_NAME, /* 5036 */
- XML_CHECK_NAME_NOT_NULL /* 5037 */
+ 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 */
#if 0
XML_CHECK_, /* 5033 */
XML_CHECK_X /* 503 */
@@ -815,7 +822,7 @@ typedef enum {
* Signature of the function to use when there is an error and
* no parsing or validity context available .
*/
-typedef void (*xmlGenericErrorFunc) (void *ctx,
+typedef void (XMLCDECL *xmlGenericErrorFunc) (void *ctx,
const char *msg,
...);
/**
@@ -826,7 +833,7 @@ typedef void (*xmlGenericErrorFunc) (void *ctx,
* Signature of the function to use when there is an error and
* the module handles the new error reporting mechanism.
*/
-typedef void (*xmlStructuredErrorFunc) (void *userData, xmlErrorPtr error);
+typedef void (XMLCALL *xmlStructuredErrorFunc) (void *userData, xmlErrorPtr error);
/*
* Use the following function to reset the two global variables
@@ -845,19 +852,19 @@ XMLPUBFUN void XMLCALL
* Default message routines used by SAX and Valid context for error
* and warning reporting.
*/
-XMLPUBFUN void XMLCALL
+XMLPUBFUN void XMLCDECL
xmlParserError (void *ctx,
const char *msg,
...);
-XMLPUBFUN void XMLCALL
+XMLPUBFUN void XMLCDECL
xmlParserWarning (void *ctx,
const char *msg,
...);
-XMLPUBFUN void XMLCALL
+XMLPUBFUN void XMLCDECL
xmlParserValidityError (void *ctx,
const char *msg,
...);
-XMLPUBFUN void XMLCALL
+XMLPUBFUN void XMLCDECL
xmlParserValidityWarning (void *ctx,
const char *msg,
...);
diff --git a/include/libxml/xmlexports.h b/include/libxml/xmlexports.h
index ee03cad..29a6f54 100644
--- a/include/libxml/xmlexports.h
+++ b/include/libxml/xmlexports.h
@@ -40,6 +40,13 @@
* Macros which declare the called convention for exported functions
*/
#define XMLCALL
+/**
+ * XMLCDECL:
+ *
+ * Macro which declares the calling convention for exported functions that
+ * use '...'.
+ */
+#define XMLCDECL
/** DOC_DISABLE */
@@ -48,6 +55,7 @@
#undef XMLPUBFUN
#undef XMLPUBVAR
#undef XMLCALL
+ #undef XMLCDECL
#if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
#define XMLPUBFUN __declspec(dllexport)
#define XMLPUBVAR __declspec(dllexport)
@@ -59,7 +67,12 @@
#define XMLPUBVAR extern
#endif
#endif
- #define XMLCALL __cdecl
+ #if defined(LIBXML_FASTCALL)
+ #define XMLCALL __fastcall
+ #else
+ #define XMLCALL __cdecl
+ #endif
+ #define XMLCDECL __cdecl
#if !defined _REENTRANT
#define _REENTRANT
#endif
@@ -70,6 +83,7 @@
#undef XMLPUBFUN
#undef XMLPUBVAR
#undef XMLCALL
+ #undef XMLCDECL
#if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
#define XMLPUBFUN __declspec(dllexport)
#define XMLPUBVAR __declspec(dllexport) extern
@@ -82,6 +96,7 @@
#endif
#endif
#define XMLCALL __cdecl
+ #define XMLCDECL __cdecl
#if !defined _REENTRANT
#define _REENTRANT
#endif
@@ -92,6 +107,7 @@
#undef XMLPUBFUN
#undef XMLPUBVAR
#undef XMLCALL
+ #undef XMLCDECL
#if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
#define XMLPUBFUN __declspec(dllexport)
#define XMLPUBVAR __declspec(dllexport)
@@ -104,6 +120,7 @@
#endif
#endif
#define XMLCALL __cdecl
+ #define XMLCDECL __cdecl
#if !defined _REENTRANT
#define _REENTRANT
#endif
@@ -114,6 +131,7 @@
#undef XMLPUBFUN
#undef XMLPUBVAR
#undef XMLCALL
+ #undef XMLCDECL
#if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
#define XMLPUBFUN __declspec(dllexport)
#define XMLPUBVAR __declspec(dllexport)
@@ -126,6 +144,7 @@
#endif
#endif
#define XMLCALL __cdecl
+ #define XMLCDECL __cdecl
#endif
/* Compatibility */
diff --git a/include/libxml/xmlregexp.h b/include/libxml/xmlregexp.h
index a7b3b29..a257bb4 100644
--- a/include/libxml/xmlregexp.h
+++ b/include/libxml/xmlregexp.h
@@ -40,6 +40,7 @@ typedef xmlRegExecCtxt *xmlRegExecCtxtPtr;
}
#endif
#include <libxml/tree.h>
+#include <libxml/dict.h>
#ifdef __cplusplus
extern "C" {
#endif
@@ -99,6 +100,113 @@ XMLPUBFUN int XMLCALL
int *nbneg,
xmlChar **values,
int *terminal);
+#ifdef LIBXML_EXPR_ENABLED
+/*
+ * Formal regular expression handling
+ * Its goal is to do some formal work on content models
+ */
+
+/* expressions are used within a context */
+typedef struct _xmlExpCtxt xmlExpCtxt;
+typedef xmlExpCtxt *xmlExpCtxtPtr;
+
+XMLPUBFUN void XMLCALL
+ xmlExpFreeCtxt (xmlExpCtxtPtr ctxt);
+XMLPUBFUN xmlExpCtxtPtr XMLCALL
+ xmlExpNewCtxt (int maxNodes,
+ xmlDictPtr dict);
+
+XMLPUBFUN int XMLCALL
+ xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+ xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt);
+
+/* Expressions are trees but the tree is opaque */
+typedef struct _xmlExpNode xmlExpNode;
+typedef xmlExpNode *xmlExpNodePtr;
+
+typedef enum {
+ XML_EXP_EMPTY = 0,
+ XML_EXP_FORBID = 1,
+ XML_EXP_ATOM = 2,
+ XML_EXP_SEQ = 3,
+ XML_EXP_OR = 4,
+ XML_EXP_COUNT = 5
+} xmlExpNodeType;
+
+/*
+ * 2 core expressions shared by all for the empty language set
+ * and for the set with just the empty token
+ */
+XMLPUBVAR xmlExpNodePtr forbiddenExp;
+XMLPUBVAR xmlExpNodePtr emptyExp;
+
+/*
+ * Expressions are reference counted internally
+ */
+XMLPUBFUN void XMLCALL
+ xmlExpFree (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr expr);
+XMLPUBFUN void XMLCALL
+ xmlExpRef (xmlExpNodePtr expr);
+
+/*
+ * constructors can be either manual or from a string
+ */
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpParse (xmlExpCtxtPtr ctxt,
+ const char *expr);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpNewAtom (xmlExpCtxtPtr ctxt,
+ const xmlChar *name,
+ int len);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpNewOr (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr left,
+ xmlExpNodePtr right);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpNewSeq (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr left,
+ xmlExpNodePtr right);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpNewRange (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr subset,
+ int min,
+ int max);
+/*
+ * The really interesting APIs
+ */
+XMLPUBFUN int XMLCALL
+ xmlExpIsNillable(xmlExpNodePtr expr);
+XMLPUBFUN int XMLCALL
+ xmlExpMaxToken (xmlExpNodePtr expr);
+XMLPUBFUN int XMLCALL
+ xmlExpGetLanguage(xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr expr,
+ const xmlChar**list,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlExpGetStart (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr expr,
+ const xmlChar**list,
+ int len);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpStringDerive(xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr expr,
+ const xmlChar *str,
+ int len);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+ xmlExpExpDerive (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr expr,
+ xmlExpNodePtr sub);
+XMLPUBFUN int XMLCALL
+ xmlExpSubsume (xmlExpCtxtPtr ctxt,
+ xmlExpNodePtr expr,
+ xmlExpNodePtr sub);
+XMLPUBFUN void XMLCALL
+ xmlExpDump (xmlBufferPtr buf,
+ xmlExpNodePtr expr);
+#endif /* LIBXML_EXPR_ENABLED */
#ifdef __cplusplus
}
#endif
diff --git a/include/libxml/xmlsave.h b/include/libxml/xmlsave.h
index 534fefd..7b8f42c 100644
--- a/include/libxml/xmlsave.h
+++ b/include/libxml/xmlsave.h
@@ -27,7 +27,8 @@ extern "C" {
* to the xmlSaveToFd() and similar calls.
*/
typedef enum {
- XML_SAVE_FORMAT = 1<<0 /* format save output */
+ XML_SAVE_FORMAT = 1<<0, /* format save output */
+ XML_SAVE_NO_DECL = 1<<1 /* drop the xml declaration */
} xmlSaveOption;
diff --git a/include/libxml/xmlschemas.h b/include/libxml/xmlschemas.h
index 6cecffd..ab47091 100644
--- a/include/libxml/xmlschemas.h
+++ b/include/libxml/xmlschemas.h
@@ -87,8 +87,8 @@ typedef xmlSchema *xmlSchemaPtr;
/**
* A schemas validation context
*/
-typedef void (*xmlSchemaValidityErrorFunc) (void *ctx, const char *msg, ...);
-typedef void (*xmlSchemaValidityWarningFunc) (void *ctx, const char *msg, ...);
+typedef void (XMLCDECL *xmlSchemaValidityErrorFunc) (void *ctx, const char *msg, ...);
+typedef void (XMLCDECL *xmlSchemaValidityWarningFunc) (void *ctx, const char *msg, ...);
typedef struct _xmlSchemaParserCtxt xmlSchemaParserCtxt;
typedef xmlSchemaParserCtxt *xmlSchemaParserCtxtPtr;
@@ -138,6 +138,9 @@ XMLPUBFUN void XMLCALL
xmlSchemaValidityErrorFunc err,
xmlSchemaValidityWarningFunc warn,
void *ctx);
+XMLPUBFUN void XMLCALL
+ xmlSchemaSetValidStructuredErrors(xmlSchemaValidCtxtPtr ctxt,
+ xmlStructuredErrorFunc serror, void *ctx);
XMLPUBFUN int XMLCALL
xmlSchemaGetValidErrors (xmlSchemaValidCtxtPtr ctxt,
xmlSchemaValidityErrorFunc *err,
diff --git a/include/libxml/xmlversion.h b/include/libxml/xmlversion.h
index d6d6149..46cb36d 100644
--- a/include/libxml/xmlversion.h
+++ b/include/libxml/xmlversion.h
@@ -29,28 +29,28 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
*
* the version string like "1.2.3"
*/
-#define LIBXML_DOTTED_VERSION "2.6.20"
+#define LIBXML_DOTTED_VERSION "2.6.21"
/**
* LIBXML_VERSION:
*
* the version number: 1.2.3 value is 1002003
*/
-#define LIBXML_VERSION 20620
+#define LIBXML_VERSION 20621
/**
* LIBXML_VERSION_STRING:
*
* the version number string, 1.2.3 value is "1002003"
*/
-#define LIBXML_VERSION_STRING "20620"
+#define LIBXML_VERSION_STRING "20621"
/**
* LIBXML_VERSION_EXTRA:
*
* extra version information, used to show a CVS compilation
*/
-#define LIBXML_VERSION_EXTRA "-CVS2521"
+#define LIBXML_VERSION_EXTRA "-CVS2619"
/**
* 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(20620);
+#define LIBXML_TEST_VERSION xmlCheckVersion(20621);
#ifndef VMS
#if 0
@@ -331,6 +331,15 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
#endif
/**
+ * LIBXML_EXPR_ENABLED:
+ *
+ * Whether the formal expressions interfaces are compiled in
+ */
+#if 1
+#define LIBXML_EXPR_ENABLED
+#endif
+
+/**
* LIBXML_SCHEMAS_ENABLED:
*
* Whether the Schemas validation interfaces are compiled in
@@ -340,12 +349,26 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
#endif
/**
+ * LIBXML_SCHEMATRON_ENABLED:
+ *
+ * Whether the Schematron validation interfaces are compiled in
+ */
+#if 1
+#define LIBXML_SCHEMATRON_ENABLED
+#endif
+
+/**
* LIBXML_MODULES_ENABLED:
*
* Whether the module interfaces are compiled in
*/
#if 1
#define LIBXML_MODULES_ENABLED
+/**
+ * LIBXML_MODULE_EXTENSION:
+ *
+ * the string suffix used by dynamic modules (usually shared libraries)
+ */
#define LIBXML_MODULE_EXTENSION ".so"
#endif
diff --git a/include/libxml/xmlversion.h.in b/include/libxml/xmlversion.h.in
index 47a28b9..a628741 100644
--- a/include/libxml/xmlversion.h.in
+++ b/include/libxml/xmlversion.h.in
@@ -331,6 +331,15 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
#endif
/**
+ * LIBXML_EXPR_ENABLED:
+ *
+ * Whether the formal expressions interfaces are compiled in
+ */
+#if @WITH_SCHEMAS@
+#define LIBXML_EXPR_ENABLED
+#endif
+
+/**
* LIBXML_SCHEMAS_ENABLED:
*
* Whether the Schemas validation interfaces are compiled in
@@ -340,12 +349,26 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
#endif
/**
+ * LIBXML_SCHEMATRON_ENABLED:
+ *
+ * Whether the Schematron validation interfaces are compiled in
+ */
+#if @WITH_SCHEMATRON@
+#define LIBXML_SCHEMATRON_ENABLED
+#endif
+
+/**
* LIBXML_MODULES_ENABLED:
*
* Whether the module interfaces are compiled in
*/
#if @WITH_MODULES@
#define LIBXML_MODULES_ENABLED
+/**
+ * LIBXML_MODULE_EXTENSION:
+ *
+ * the string suffix used by dynamic modules (usually shared libraries)
+ */
#define LIBXML_MODULE_EXTENSION "@MODULE_EXTENSION@"
#endif
diff --git a/include/libxml/xpath.h b/include/libxml/xpath.h
index eee2630..76473a6 100644
--- a/include/libxml/xpath.h
+++ b/include/libxml/xpath.h
@@ -249,6 +249,23 @@ typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt,
const xmlChar *ns_uri);
/**
+ * xmlXPathFlags:
+ * Flags for XPath engine compilation and runtime
+ */
+/**
+ * XML_XPATH_CHECKNS:
+ *
+ * check namespaces at compilation
+ */
+#define XML_XPATH_CHECKNS (1<<0)
+/**
+ * XML_XPATH_NOVAR:
+ *
+ * forbid variables in expression
+ */
+#define XML_XPATH_NOVAR (1<<1)
+
+/**
* xmlXPathContext:
*
* Expression evaluation occurs with respect to a context.
@@ -324,6 +341,8 @@ struct _xmlXPathContext {
/* dictionnary */
xmlDictPtr dict; /* dictionnary if any */
+
+ int flags; /* flags to control compilation */
};
/*
diff --git a/libxml.spec.in b/libxml.spec.in
index 91972bd..6b5a22c 100644
--- a/libxml.spec.in
+++ b/libxml.spec.in
@@ -64,31 +64,34 @@ at parse time or later once the document has been modified.
# try to use compiler profiling, based on Arjan van de Ven <arjanv@redhat.com>
# initial test spec. This really doesn't work okay for most tests done.
#
-GCC_VERSION=`gcc --version | grep "^gcc" | awk '{ print $3 }' | sed 's+\([0-9]\)\.\([0-9]\)\..*+\1\2+'`
-if [ $GCC_VERSION -ge 34 ]
-then
- PROF_GEN='-fprofile-generate'
- PROF_USE='-fprofile-use'
-fi
-
-if [ "$PROF_GEN" != "" ]
-then
- # First generate a profiling version
- CFLAGS="${RPM_OPT_FLAGS} ${PROF_GEN}" %configure
- make
- # Run a few sampling
- make dba100000.xml
- ./xmllint --noout dba100000.xml
- ./xmllint --stream dba100000.xml
- ./xmllint --noout --valid test/valid/REC-xml-19980210.xml
- ./xmllint --stream --valid test/valid/REC-xml-19980210.xml
- # Then generate code based on profile
- CFLAGS="${RPM_OPT_FLAGS} ${PROF_USE}" %configure
- make
-else
- %configure
- make
-fi
+# Well except it's just broken most of the time.
+#GCC_VERSION=`gcc --version | grep "^gcc" | awk '{ print $3 }' | sed 's+\([0-9]\)\.\([0-9]\)\..*+\1\2+'`
+#if [ $GCC_VERSION -ge 34 ]
+#then
+# PROF_GEN='-fprofile-generate'
+# PROF_USE='-fprofile-use'
+#fi
+#
+#if [ "$PROF_GEN" != "" ]
+#then
+# # First generate a profiling version
+# CFLAGS="${RPM_OPT_FLAGS} ${PROF_GEN}" %configure
+# make
+# # Run a few sampling
+# make dba100000.xml
+# ./xmllint --noout dba100000.xml
+# ./xmllint --stream dba100000.xml
+# ./xmllint --noout --valid test/valid/REC-xml-19980210.xml
+# ./xmllint --stream --valid test/valid/REC-xml-19980210.xml
+# # Then generate code based on profile
+# CFLAGS="${RPM_OPT_FLAGS} ${PROF_USE}" %configure
+# make
+#else
+# %configure
+# make
+#fi
+%configure
+make
gzip -9 ChangeLog
%install
diff --git a/libxml2.spec b/libxml2.spec
index a6d422d..f5648f8 100644
--- a/libxml2.spec
+++ b/libxml2.spec
@@ -1,6 +1,6 @@
Summary: Library providing XML and HTML support
Name: libxml2
-Version: 2.6.20
+Version: 2.6.21
Release: 1
License: MIT
Group: Development/Libraries
@@ -64,31 +64,34 @@ at parse time or later once the document has been modified.
# try to use compiler profiling, based on Arjan van de Ven <arjanv@redhat.com>
# initial test spec. This really doesn't work okay for most tests done.
#
-GCC_VERSION=`gcc --version | grep "^gcc" | awk '{ print $3 }' | sed 's+\([0-9]\)\.\([0-9]\)\..*+\1\2+'`
-if [ $GCC_VERSION -ge 34 ]
-then
- PROF_GEN='-fprofile-generate'
- PROF_USE='-fprofile-use'
-fi
-
-if [ "$PROF_GEN" != "" ]
-then
- # First generate a profiling version
- CFLAGS="${RPM_OPT_FLAGS} ${PROF_GEN}" %configure
- make
- # Run a few sampling
- make dba100000.xml
- ./xmllint --noout dba100000.xml
- ./xmllint --stream dba100000.xml
- ./xmllint --noout --valid test/valid/REC-xml-19980210.xml
- ./xmllint --stream --valid test/valid/REC-xml-19980210.xml
- # Then generate code based on profile
- CFLAGS="${RPM_OPT_FLAGS} ${PROF_USE}" %configure
- make
-else
- %configure
- make
-fi
+# Well except it's just broken most of the time.
+#GCC_VERSION=`gcc --version | grep "^gcc" | awk '{ print $3 }' | sed 's+\([0-9]\)\.\([0-9]\)\..*+\1\2+'`
+#if [ $GCC_VERSION -ge 34 ]
+#then
+# PROF_GEN='-fprofile-generate'
+# PROF_USE='-fprofile-use'
+#fi
+#
+#if [ "$PROF_GEN" != "" ]
+#then
+# # First generate a profiling version
+# CFLAGS="${RPM_OPT_FLAGS} ${PROF_GEN}" %configure
+# make
+# # Run a few sampling
+# make dba100000.xml
+# ./xmllint --noout dba100000.xml
+# ./xmllint --stream dba100000.xml
+# ./xmllint --noout --valid test/valid/REC-xml-19980210.xml
+# ./xmllint --stream --valid test/valid/REC-xml-19980210.xml
+# # Then generate code based on profile
+# CFLAGS="${RPM_OPT_FLAGS} ${PROF_USE}" %configure
+# make
+#else
+# %configure
+# make
+#fi
+%configure
+make
gzip -9 ChangeLog
%install
@@ -150,8 +153,8 @@ rm -fr %{buildroot}
%doc doc/python.html
%changelog
-* Mon Jul 11 2005 Daniel Veillard <veillard@redhat.com>
-- upstream release 2.6.20 see http://xmlsoft.org/news.html
+* Sun Sep 4 2005 Daniel Veillard <veillard@redhat.com>
+- upstream release 2.6.21 see http://xmlsoft.org/news.html
* Thu Jan 2 2003 Daniel Veillard <veillard@redhat.com>
- integrated drv_libxml2 xml.sax driver from Stéphane Bidoul
diff --git a/nanoftp.c b/nanoftp.c
index b7dc753..c78503b 100644
--- a/nanoftp.c
+++ b/nanoftp.c
@@ -316,7 +316,7 @@ xmlNanoFTPScanURL(void *ctx, const char *URL) {
}
if (URL == NULL) return;
- uri = xmlParseURI(URL);
+ uri = xmlParseURIRaw(URL, 1);
if (uri == NULL)
return;
@@ -377,7 +377,7 @@ xmlNanoFTPUpdateURL(void *ctx, const char *URL) {
if (ctxt->hostname == NULL)
return(-1);
- uri = xmlParseURI(URL);
+ uri = xmlParseURIRaw(URL, 1);
if (uri == NULL)
return(-1);
@@ -440,7 +440,7 @@ xmlNanoFTPScanProxy(const char *URL) {
#endif
if (URL == NULL) return;
- uri = xmlParseURI(URL);
+ uri = xmlParseURIRaw(URL, 1);
if ((uri == NULL) || (uri->scheme == NULL) ||
(strcmp(uri->scheme, "ftp")) || (uri->server == NULL)) {
__xmlIOErr(XML_FROM_FTP, XML_FTP_URL_SYNTAX, "Syntax Error\n");
@@ -944,7 +944,7 @@ xmlNanoFTPConnect(void *ctx) {
((struct sockaddr_in *)&ctxt->ftpAddr)->sin_family = AF_INET;
memcpy (&((struct sockaddr_in *)&ctxt->ftpAddr)->sin_addr,
hp->h_addr_list[0], hp->h_length);
- ((struct sockaddr_in *)&ctxt->ftpAddr)->sin_port = htons (port);
+ ((struct sockaddr_in *)&ctxt->ftpAddr)->sin_port = (u_short)htons ((unsigned short)port);
ctxt->controlFd = socket (AF_INET, SOCK_STREAM, 0);
addrlen = sizeof (struct sockaddr_in);
}
diff --git a/nanohttp.c b/nanohttp.c
index de89ab7..1244fe7 100644
--- a/nanohttp.c
+++ b/nanohttp.c
@@ -248,8 +248,10 @@ done:
void
xmlNanoHTTPCleanup(void) {
- if (proxy != NULL)
+ if (proxy != NULL) {
xmlFree(proxy);
+ proxy = NULL;
+ }
#ifdef _WINSOCKAPI_
if (initialized)
WSACleanup();
@@ -291,7 +293,7 @@ xmlNanoHTTPScanURL(xmlNanoHTTPCtxtPtr ctxt, const char *URL) {
}
if (URL == NULL) return;
- uri = xmlParseURI(URL);
+ uri = xmlParseURIRaw(URL, 1);
if (uri == NULL)
return;
@@ -344,7 +346,7 @@ xmlNanoHTTPScanProxy(const char *URL) {
#endif
if (URL == NULL) return;
- uri = xmlParseURI(URL);
+ uri = xmlParseURIRaw(URL, 1);
if ((uri == NULL) || (uri->scheme == NULL) ||
(strcmp(uri->scheme, "http")) || (uri->server == NULL)) {
__xmlIOErr(XML_FROM_HTTP, XML_HTTP_URL_SYNTAX, "Syntax Error\n");
@@ -460,7 +462,14 @@ xmlNanoHTTPSend(xmlNanoHTTPCtxtPtr ctxt, const char * xmt_ptr, int outlen) {
tv.tv_sec = timeout;
tv.tv_usec = 0;
FD_ZERO( &wfd );
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable: 4018)
+#endif
FD_SET( ctxt->fd, &wfd );
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
(void)select( ctxt->fd + 1, NULL, &wfd, NULL, &tv );
}
}
@@ -553,7 +562,14 @@ xmlNanoHTTPRecv(xmlNanoHTTPCtxtPtr ctxt) {
tv.tv_sec = timeout;
tv.tv_usec = 0;
FD_ZERO(&rfd);
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable: 4018)
+#endif
FD_SET(ctxt->fd, &rfd);
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
if ( (select(ctxt->fd+1, &rfd, NULL, NULL, &tv)<1)
#if defined(EINTR)
@@ -839,7 +855,11 @@ xmlNanoHTTPConnectAttempt(struct sockaddr *addr)
tv.tv_sec = timeout;
tv.tv_usec = 0;
-
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable: 4018)
+#endif
FD_ZERO(&wfd);
FD_SET(s, &wfd);
@@ -851,6 +871,9 @@ xmlNanoHTTPConnectAttempt(struct sockaddr *addr)
#else
switch(select(s+1, NULL, &wfd, NULL, &tv))
#endif
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
{
case 0:
/* Time out */
@@ -1034,7 +1057,7 @@ xmlNanoHTTPConnectHost(const char *host, int port)
memcpy (&ia, h->h_addr_list[i], h->h_length);
sockin.sin_family = h->h_addrtype;
sockin.sin_addr = ia;
- sockin.sin_port = htons (port);
+ sockin.sin_port = (u_short)htons ((unsigned short)port);
addr = (struct sockaddr *) &sockin;
#ifdef SUPPORT_IP6
} else if (have_ipv6 () && (h->h_addrtype == AF_INET6)) {
diff --git a/parser.c b/parser.c
index 009dcd3..f0d9689 100644
--- a/parser.c
+++ b/parser.c
@@ -583,6 +583,212 @@ xmlNsErr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
/************************************************************************
* *
+ * Library wide options *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlHasFeature:
+ * @feature: the feature to be examined
+ *
+ * Examines if the library has been compiled with a given feature.
+ *
+ * Returns a non-zero value if the feature exist, otherwise zero.
+ * Returns zero (0) if the feature does not exist or an unknown
+ * unknown feature is requested, non-zero otherwise.
+ */
+int
+xmlHasFeature(xmlFeature feature)
+{
+ switch (feature) {
+ case XML_FEATURE_THREAD:
+#ifdef LIBXML_THREAD_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_TREE:
+#ifdef LIBXML_TREE_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_OUTPUT:
+#ifdef LIBXML_OUTPUT_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_PUSH:
+#ifdef LIBXML_PUSH_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_READER:
+#ifdef LIBXML_READER_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_PATTERN:
+#ifdef LIBXML_PATTERN_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_WRITER:
+#ifdef LIBXML_WRITER_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_SAX1:
+#ifdef LIBXML_SAX1_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_FTP:
+#ifdef LIBXML_FTP_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_HTTP:
+#ifdef LIBXML_HTTP_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_VALID:
+#ifdef LIBXML_VALID_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_HTML:
+#ifdef LIBXML_HTML_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_LEGACY:
+#ifdef LIBXML_LEGACY_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_C14N:
+#ifdef LIBXML_C14N_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_CATALOG:
+#ifdef LIBXML_CATALOG_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_XPATH:
+#ifdef LIBXML_XPATH_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_XPTR:
+#ifdef LIBXML_XPTR_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_XINCLUDE:
+#ifdef LIBXML_XINCLUDE_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_ICONV:
+#ifdef LIBXML_ICONV_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_ISO8859X:
+#ifdef LIBXML_ISO8859X_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_UNICODE:
+#ifdef LIBXML_UNICODE_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_REGEXP:
+#ifdef LIBXML_REGEXP_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_AUTOMATA:
+#ifdef LIBXML_AUTOMATA_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_EXPR:
+#ifdef LIBXML_EXPR_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_SCHEMAS:
+#ifdef LIBXML_SCHEMAS_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_SCHEMATRON:
+#ifdef LIBXML_SCHEMATRON_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_MODULES:
+#ifdef LIBXML_MODULES_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_DEBUG:
+#ifdef LIBXML_DEBUG_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_DEBUG_MEM:
+#ifdef DEBUG_MEMORY_LOCATION
+ return(1);
+#else
+ return(0);
+#endif
+ case XML_FEATURE_DEBUG_RUN:
+#ifdef LIBXML_DEBUG_RUNTIME
+ return(1);
+#else
+ return(0);
+#endif
+ default:
+ break;
+ }
+ return(0);
+}
+
+/************************************************************************
+ * *
* SAX2 defaulted attributes handling *
* *
************************************************************************/
@@ -684,7 +890,7 @@ xmlAddDefAttrs(xmlParserCtxtPtr ctxt,
}
/*
- * plit the element name into prefix:localname , the string found
+ * Split the element name into prefix:localname , the string found
* are within the DTD and hen not associated to namespace names.
*/
name = xmlSplitQName3(fullattr, &len);
@@ -984,14 +1190,14 @@ inputPop(xmlParserCtxtPtr ctxt)
if (ctxt == NULL)
return(NULL);
if (ctxt->inputNr <= 0)
- return (0);
+ return (NULL);
ctxt->inputNr--;
if (ctxt->inputNr > 0)
ctxt->input = ctxt->inputTab[ctxt->inputNr - 1];
else
ctxt->input = NULL;
ret = ctxt->inputTab[ctxt->inputNr];
- ctxt->inputTab[ctxt->inputNr] = 0;
+ ctxt->inputTab[ctxt->inputNr] = NULL;
return (ret);
}
/**
@@ -1053,7 +1259,7 @@ nodePop(xmlParserCtxtPtr ctxt)
else
ctxt->node = NULL;
ret = ctxt->nodeTab[ctxt->nodeNr];
- ctxt->nodeTab[ctxt->nodeNr] = 0;
+ ctxt->nodeTab[ctxt->nodeNr] = NULL;
return (ret);
}
@@ -1118,7 +1324,7 @@ nameNsPop(xmlParserCtxtPtr ctxt)
const xmlChar *ret;
if (ctxt->nameNr <= 0)
- return (0);
+ return (NULL);
ctxt->nameNr--;
if (ctxt->nameNr > 0)
ctxt->name = ctxt->nameTab[ctxt->nameNr - 1];
@@ -1184,7 +1390,7 @@ namePop(xmlParserCtxtPtr ctxt)
else
ctxt->name = NULL;
ret = ctxt->nameTab[ctxt->nameNr];
- ctxt->nameTab[ctxt->nameNr] = 0;
+ ctxt->nameTab[ctxt->nameNr] = NULL;
return (ret);
}
@@ -2467,6 +2673,8 @@ xmlParseNameComplex(xmlParserCtxtPtr ctxt) {
NEXTL(l);
c = CUR_CHAR(l);
}
+ 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));
}
@@ -3166,6 +3374,45 @@ xmlParsePubidLiteral(xmlParserCtxtPtr ctxt) {
}
void xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata);
+
+/*
+ * used for the test in the inner loop of the char data testing
+ */
+static const unsigned char test_char_data[256] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9, CR/LF separated */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x00, 0x27, /* & */
+ 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3A, 0x3B, 0x00, 0x3D, 0x3E, 0x3F, /* < */
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x00, 0x5E, 0x5F, /* ] */
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* non-ascii */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
/**
* xmlParseCharData:
* @ctxt: an XML parser context
@@ -3237,14 +3484,10 @@ get_more_space:
get_more:
ccol = ctxt->input->col;
- while (((*in > ']') && (*in <= 0x7F)) ||
- ((*in > '&') && (*in < '<')) ||
- ((*in > '<') && (*in < ']')) ||
- ((*in >= 0x20) && (*in < '&')) ||
- (*in == 0x09)) {
- in++;
- ccol++;
- }
+ while (test_char_data[*in]) {
+ in++;
+ ccol++;
+ }
ctxt->input->col = ccol;
if (*in == 0xA) {
ctxt->input->line++; ctxt->input->col = 1;
@@ -6063,6 +6306,11 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt) {
} else {
xmlErrMsgStr(ctxt, XML_WAR_UNDECLARED_ENTITY,
"Entity '%s' not defined\n", name);
+ if ((ctxt->inSubset == 0) &&
+ (ctxt->sax != NULL) &&
+ (ctxt->sax->reference != NULL)) {
+ ctxt->sax->reference(ctxt, name);
+ }
}
ctxt->valid = 0;
}
@@ -11277,8 +11525,9 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
*lst = cur;
while (cur != NULL) {
#ifdef LIBXML_VALID_ENABLED
- if (oldctxt->validate && oldctxt->wellFormed &&
- oldctxt->myDoc && oldctxt->myDoc->intSubset) {
+ if ((oldctxt->validate) && (oldctxt->wellFormed) &&
+ (oldctxt->myDoc) && (oldctxt->myDoc->intSubset) &&
+ (cur->type == XML_ELEMENT_NODE)) {
oldctxt->valid &= xmlValidateElement(&oldctxt->vctxt,
oldctxt->myDoc, cur);
}
@@ -12419,7 +12668,7 @@ xmlSetEntityReferenceFunc(xmlEntityReferenceFunc func)
#include <libxml/xpath.h>
#endif
-extern void xmlGenericErrorDefaultFunc(void *ctx, const char *msg, ...);
+extern void XMLCDECL xmlGenericErrorDefaultFunc(void *ctx, const char *msg, ...);
static int xmlParserInitialized = 0;
/**
@@ -12801,6 +13050,10 @@ xmlCtxtUseOptions(xmlParserCtxtPtr ctxt, int options)
ctxt->options |= XML_PARSE_NONET;
options -= XML_PARSE_NONET;
}
+ if (options & XML_PARSE_COMPACT) {
+ ctxt->options |= XML_PARSE_COMPACT;
+ options -= XML_PARSE_COMPACT;
+ }
ctxt->linenumbers = 1;
return (options);
}
diff --git a/parserInternals.c b/parserInternals.c
index b5e302e..f3fcd6f 100644
--- a/parserInternals.c
+++ b/parserInternals.c
@@ -728,7 +728,7 @@ encoding_error:
{
char buffer[150];
- snprintf(buffer, 149, "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
+ snprintf(&buffer[0], 149, "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
ctxt->input->cur[0], ctxt->input->cur[1],
ctxt->input->cur[2], ctxt->input->cur[3]);
__xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
@@ -1794,7 +1794,7 @@ xmlFreeParserCtxt(xmlParserCtxtPtr ctxt)
*/
xmlParserCtxtPtr
-xmlNewParserCtxt()
+xmlNewParserCtxt(void)
{
xmlParserCtxtPtr ctxt;
diff --git a/pattern.c b/pattern.c
index 125e37c..a76a58c 100644
--- a/pattern.c
+++ b/pattern.c
@@ -139,7 +139,7 @@ struct _xmlPattern {
xmlDictPtr dict; /* the optional dictionary */
struct _xmlPattern *next; /* next pattern if | is used */
const xmlChar *pattern; /* the pattern */
- xmlPatternFlags flags; /* flags */
+ int flags; /* flags */
int nbStep;
int maxStep;
xmlStepOpPtr steps; /* ops for computation */
@@ -905,20 +905,26 @@ xmlCompileAttributeTest(xmlPatParserContextPtr ctxt) {
* This is a namespace match
*/
token = xmlPatScanName(ctxt);
- for (i = 0;i < ctxt->nb_namespaces;i++) {
- if (xmlStrEqual(ctxt->namespaces[2 * i + 1], prefix)) {
- URL = xmlStrdup(ctxt->namespaces[2 * i]);
- break;
+ if ((prefix[0] == 'x') &&
+ (prefix[1] == 'm') &&
+ (prefix[2] == 'l') &&
+ (prefix[3] == 0)) {
+ URL = xmlStrdup(XML_XML_NAMESPACE);
+ } else {
+ for (i = 0;i < ctxt->nb_namespaces;i++) {
+ if (xmlStrEqual(ctxt->namespaces[2 * i + 1], prefix)) {
+ URL = xmlStrdup(ctxt->namespaces[2 * i]);
+ break;
+ }
+ }
+ if (i >= ctxt->nb_namespaces) {
+ ERROR5(NULL, NULL, NULL,
+ "xmlCompileAttributeTest : no namespace bound to prefix %s\n",
+ prefix);
+ ctxt->error = 1;
+ goto error;
}
}
- if (i >= ctxt->nb_namespaces) {
- ERROR5(NULL, NULL, NULL,
- "xmlCompileAttributeTest : no namespace bound to prefix %s\n",
- prefix);
- ctxt->error = 1;
- goto error;
- }
-
xmlFree(prefix);
if (token == NULL) {
if (CUR == '*') {
@@ -998,18 +1004,25 @@ xmlCompileStepPattern(xmlPatParserContextPtr ctxt) {
* This is a namespace match
*/
token = xmlPatScanName(ctxt);
- for (i = 0;i < ctxt->nb_namespaces;i++) {
- if (xmlStrEqual(ctxt->namespaces[2 * i + 1], prefix)) {
- URL = xmlStrdup(ctxt->namespaces[2 * i]);
- break;
+ if ((prefix[0] == 'x') &&
+ (prefix[1] == 'm') &&
+ (prefix[2] == 'l') &&
+ (prefix[3] == 0)) {
+ URL = xmlStrdup(XML_XML_NAMESPACE);
+ } else {
+ for (i = 0;i < ctxt->nb_namespaces;i++) {
+ if (xmlStrEqual(ctxt->namespaces[2 * i + 1], prefix)) {
+ URL = xmlStrdup(ctxt->namespaces[2 * i]);
+ break;
+ }
+ }
+ if (i >= ctxt->nb_namespaces) {
+ ERROR5(NULL, NULL, NULL,
+ "xmlCompileStepPattern : no namespace bound to prefix %s\n",
+ prefix);
+ ctxt->error = 1;
+ goto error;
}
- }
- if (i >= ctxt->nb_namespaces) {
- ERROR5(NULL, NULL, NULL,
- "xmlCompileStepPattern : no namespace bound to prefix %s\n",
- prefix);
- ctxt->error = 1;
- goto error;
}
xmlFree(prefix);
if (token == NULL) {
@@ -1051,18 +1064,25 @@ xmlCompileStepPattern(xmlPatParserContextPtr ctxt) {
* This is a namespace match
*/
token = xmlPatScanName(ctxt);
- for (i = 0;i < ctxt->nb_namespaces;i++) {
- if (xmlStrEqual(ctxt->namespaces[2 * i + 1], prefix)) {
- URL = xmlStrdup(ctxt->namespaces[2 * i]);
- break;
+ if ((prefix[0] == 'x') &&
+ (prefix[1] == 'm') &&
+ (prefix[2] == 'l') &&
+ (prefix[3] == 0)) {
+ URL = xmlStrdup(XML_XML_NAMESPACE);
+ } else {
+ for (i = 0;i < ctxt->nb_namespaces;i++) {
+ if (xmlStrEqual(ctxt->namespaces[2 * i + 1], prefix)) {
+ URL = xmlStrdup(ctxt->namespaces[2 * i]);
+ break;
+ }
+ }
+ if (i >= ctxt->nb_namespaces) {
+ ERROR5(NULL, NULL, NULL,
+ "xmlCompileStepPattern : no namespace bound "
+ "to prefix %s\n", prefix);
+ ctxt->error = 1;
+ goto error;
}
- }
- if (i >= ctxt->nb_namespaces) {
- ERROR5(NULL, NULL, NULL,
- "xmlCompileStepPattern : no namespace bound "
- "to prefix %s\n", prefix);
- ctxt->error = 1;
- goto error;
}
xmlFree(prefix);
if (token == NULL) {
@@ -1615,6 +1635,14 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
*/
if (comp->nbStep == 0) {
/*
+ * / and . are handled at the XPath node set creation
+ * level by checking min depth
+ */
+ if (stream->flags & XML_PATTERN_XPATH) {
+ stream = stream->next;
+ continue; /* while */
+ }
+ /*
* For non-pattern like evaluation like XML Schema IDCs
* or traditional XPath expressions, this will match if
* we are at the first level only, otherwise on every level.
@@ -1934,7 +1962,7 @@ xmlStreamPop(xmlStreamCtxtPtr stream) {
* xmlPatterncompile:
* @pattern: the pattern to compile
* @dict: an optional dictionary for interned strings
- * @flags: compilation flags, undefined yet
+ * @flags: compilation flags, see xmlPatternFlags
* @namespaces: the prefix definitions, array of [URI, prefix] or NULL
*
* Compile a pattern.
@@ -1942,8 +1970,7 @@ xmlStreamPop(xmlStreamCtxtPtr stream) {
* Returns the compiled form of the pattern or NULL in case of error
*/
xmlPatternPtr
-xmlPatterncompile(const xmlChar *pattern, xmlDict *dict,
- xmlPatternFlags flags,
+xmlPatterncompile(const xmlChar *pattern, xmlDict *dict, int flags,
const xmlChar **namespaces) {
xmlPatternPtr ret = NULL, cur;
xmlPatParserContextPtr ctxt = NULL;
@@ -2138,7 +2165,33 @@ xmlPatternMaxDepth(xmlPatternPtr comp) {
comp = comp->next;
}
return(ret);
+}
+/**
+ * xmlPatternMinDepth:
+ * @comp: the precompiled pattern
+ *
+ * Check the minimum depth reachable by a pattern, 0 mean the / or . are
+ * part of the set.
+ *
+ * Returns -1 in case of error otherwise the depth,
+ *
+ */
+int
+xmlPatternMinDepth(xmlPatternPtr comp) {
+ int ret = 12345678;
+ if (comp == NULL)
+ return(-1);
+ while (comp != NULL) {
+ if (comp->stream == NULL)
+ return(-1);
+ if (comp->stream->nbStep < ret)
+ ret = comp->stream->nbStep;
+ if (ret == 0)
+ return(0);
+ comp = comp->next;
+ }
+ return(ret);
}
/**
diff --git a/python/Makefile.in b/python/Makefile.in
index 08a5540..36cac59 100644
--- a/python/Makefile.in
+++ b/python/Makefile.in
@@ -192,6 +192,7 @@ TEST_PUSH = @TEST_PUSH@
TEST_REGEXPS = @TEST_REGEXPS@
TEST_SAX = @TEST_SAX@
TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_SCHEMATRON = @TEST_SCHEMATRON@
TEST_THREADS = @TEST_THREADS@
TEST_VALID = @TEST_VALID@
TEST_VTIME = @TEST_VTIME@
@@ -227,6 +228,7 @@ WITH_REGEXPS = @WITH_REGEXPS@
WITH_RUN_DEBUG = @WITH_RUN_DEBUG@
WITH_SAX1 = @WITH_SAX1@
WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_SCHEMATRON = @WITH_SCHEMATRON@
WITH_THREADS = @WITH_THREADS@
WITH_TREE = @WITH_TREE@
WITH_TRIO = @WITH_TRIO@
diff --git a/python/generator.py b/python/generator.py
index f9a8930..642b8d1 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -1055,7 +1055,7 @@ 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, id (self))\n\n" % (
+ classes.write(" return \"%s\" %% (self.name, long(id (self)))\n\n" % (
format))
else:
txt.write("Class %s()\n" % (classname))
diff --git a/python/libxml.c b/python/libxml.c
index 8fc63f8..ad8ac7c 100644
--- a/python/libxml.c
+++ b/python/libxml.c
@@ -681,8 +681,12 @@ pythonExternalEntityLoader(const char *URL, const char *ID,
result = xmlNewIOInputStream(ctxt, buf,
XML_CHAR_ENCODING_NONE);
}
+#if 0
} else {
- printf("pythonExternalEntityLoader: can't read\n");
+ if (URL != NULL)
+ printf("pythonExternalEntityLoader: can't read %s\n",
+ URL);
+#endif
}
if (result == NULL) {
Py_DECREF(ret);
@@ -2529,6 +2533,7 @@ libxml_parent(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
res = attr->parent;
}
+ break;
case XML_ENTITY_DECL:
case XML_NAMESPACE_DECL:
case XML_XINCLUDE_START:
diff --git a/python/libxml2-py.c b/python/libxml2-py.c
index 598f238..b656d7f 100644
--- a/python/libxml2-py.c
+++ b/python/libxml2-py.c
@@ -951,22 +951,18 @@ libxml_xmlTextReaderGetParserLineNumber(PyObject *self ATTRIBUTE_UNUSED, PyObjec
}
#endif /* defined(LIBXML_READER_ENABLED) */
-#if defined(LIBXML_UNICODE_ENABLED)
PyObject *
-libxml_xmlUCSIsKhmerSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
- PyObject *py_retval;
- int c_retval;
- int code;
+libxml_xmlCheckVersion(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ int version;
- if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKhmerSymbols", &code))
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlCheckVersion", &version))
return(NULL);
- c_retval = xmlUCSIsKhmerSymbols(code);
- py_retval = libxml_intWrap((int) c_retval);
- return(py_retval);
+ xmlCheckVersion(version);
+ Py_INCREF(Py_None);
+ return(Py_None);
}
-#endif /* defined(LIBXML_UNICODE_ENABLED) */
PyObject *
libxml_xmlParseMarkupDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
xmlParserCtxtPtr ctxt;
@@ -1198,22 +1194,28 @@ libxml_xmlIOHTTPMatch(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
}
#endif /* defined(LIBXML_HTTP_ENABLED) */
-#if defined(LIBXML_XPATH_ENABLED)
PyObject *
-libxml_xmlXPathNewFloat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+libxml_xmlStringLenDecodeEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
PyObject *py_retval;
- xmlXPathObjectPtr c_retval;
- double val;
+ 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 *)"d:xmlXPathNewFloat", &val))
+ 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 = xmlXPathNewFloat(val);
- py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+ c_retval = xmlStringLenDecodeEntities(ctxt, str, len, what, end, end2, end3);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
return(py_retval);
}
-#endif /* defined(LIBXML_XPATH_ENABLED) */
#if defined(LIBXML_UNICODE_ENABLED)
PyObject *
libxml_xmlUCSIsCatCc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
@@ -2943,13 +2945,17 @@ libxml_htmlCtxtUseOptions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
#endif /* defined(LIBXML_HTML_ENABLED) */
#if defined(LIBXML_CATALOG_ENABLED)
PyObject *
-libxml_xmlCatalogConvert(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
- PyObject *py_retval;
- int c_retval;
+libxml_xmlFreeCatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ xmlCatalogPtr catal;
+ PyObject *pyobj_catal;
- c_retval = xmlCatalogConvert();
- py_retval = libxml_intWrap((int) c_retval);
- return(py_retval);
+ 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) */
@@ -3334,20 +3340,6 @@ libxml_htmlParseElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
}
#endif /* defined(LIBXML_HTML_ENABLED) */
-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);
-}
-
#if defined(LIBXML_UNICODE_ENABLED)
PyObject *
libxml_xmlUCSIsGreek(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
@@ -3501,22 +3493,16 @@ libxml_xmlNanoHTTPScanProxy(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
}
#endif /* defined(LIBXML_HTTP_ENABLED) */
-#if defined(LIBXML_UNICODE_ENABLED)
+#if defined(LIBXML_SCHEMAS_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);
+libxml_xmlRelaxNGCleanupTypes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
- c_retval = xmlUCSIsCatMc(code);
- py_retval = libxml_intWrap((int) c_retval);
- return(py_retval);
+ xmlRelaxNGCleanupTypes();
+ Py_INCREF(Py_None);
+ return(Py_None);
}
-#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
PyObject *
libxml_xmlStringLenGetNodeList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
PyObject *py_retval;
@@ -4290,6 +4276,23 @@ libxml_xmlHasProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
return(py_retval);
}
+#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) */
PyObject *
libxml_xmlURISetScheme(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
xmlURIPtr URI;
@@ -4995,18 +4998,22 @@ libxml_xmlDocSetRootElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
}
#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
PyObject *
-libxml_xmlCheckVersion(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
- int version;
+libxml_xmlUCSIsKhmerSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
- if (!PyArg_ParseTuple(args, (char *)"i:xmlCheckVersion", &version))
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKhmerSymbols", &code))
return(NULL);
- xmlCheckVersion(version);
- Py_INCREF(Py_None);
- return(Py_None);
+ c_retval = xmlUCSIsKhmerSymbols(code);
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
}
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
#if defined(LIBXML_REGEXP_ENABLED)
PyObject *
libxml_xmlRegFreeRegexp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
@@ -5396,6 +5403,20 @@ libxml_htmlDocDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
}
#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+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);
+}
+
#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
PyObject *
libxml_xmlTextReaderRelaxNGValidate(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
@@ -5546,16 +5567,22 @@ libxml_xmlUCSIsCatMn(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
}
#endif /* defined(LIBXML_UNICODE_ENABLED) */
-#if defined(LIBXML_SCHEMAS_ENABLED)
+#if defined(LIBXML_UNICODE_ENABLED)
PyObject *
-libxml_xmlRelaxNGCleanupTypes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+libxml_xmlUCSIsCatMc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+ PyObject *py_retval;
+ int c_retval;
+ int code;
- xmlRelaxNGCleanupTypes();
- Py_INCREF(Py_None);
- return(Py_None);
+ 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_SCHEMAS_ENABLED) */
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
#if defined(LIBXML_UNICODE_ENABLED)
PyObject *
libxml_xmlUCSIsCatMe(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
@@ -5642,23 +5669,6 @@ libxml_xmlStrdup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
return(py_retval);
}
-#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) */
PyObject *
libxml_xmlCtxtReadDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
PyObject *py_retval;
@@ -5679,6 +5689,20 @@ libxml_xmlCtxtReadDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
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);
+}
+
#if defined(LIBXML_READER_ENABLED)
PyObject *
libxml_xmlTextReaderQuoteChar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
@@ -5817,20 +5841,6 @@ libxml_xmlErrorGetDomain(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
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);
-}
-
#if defined(LIBXML_XPATH_ENABLED)
PyObject *
libxml_xmlXPathFloorFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
@@ -7406,6 +7416,22 @@ libxml_xmlXPathNextAncestorOrSelf(PyObject *self ATTRIBUTE_UNUSED, PyObject *arg
#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_xmlXPathNewString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
PyObject *py_retval;
xmlXPathObjectPtr c_retval;
@@ -7982,28 +8008,6 @@ libxml_xmlNanoFTPProxy(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
}
#endif /* defined(LIBXML_FTP_ENABLED) */
-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);
-}
-
#if defined(LIBXML_UNICODE_ENABLED)
PyObject *
libxml_xmlUCSIsCJKUnifiedIdeographsExtensionA(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
@@ -8421,20 +8425,28 @@ libxml_xmlTextReaderSetSchema(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
}
#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
PyObject *
-libxml_xmlCharStrdup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+libxml_xmlUnsetNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
PyObject *py_retval;
- xmlChar * c_retval;
- char * cur;
+ int c_retval;
+ xmlNodePtr node;
+ PyObject *pyobj_node;
+ xmlNsPtr ns;
+ PyObject *pyobj_ns;
+ xmlChar * name;
- if (!PyArg_ParseTuple(args, (char *)"z:xmlCharStrdup", &cur))
+ 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 = xmlCharStrdup(cur);
- py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+ 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_OUTPUT_ENABLED)
PyObject *
libxml_xmlElemDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
@@ -9319,22 +9331,22 @@ libxml_xmlEncodeSpecialChars(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
return(py_retval);
}
+#if defined(LIBXML_UNICODE_ENABLED)
PyObject *
-libxml_namePop(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+libxml_xmlUCSIsEthiopic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
PyObject *py_retval;
- const xmlChar * c_retval;
- xmlParserCtxtPtr ctxt;
- PyObject *pyobj_ctxt;
+ int c_retval;
+ int code;
- if (!PyArg_ParseTuple(args, (char *)"O:namePop", &pyobj_ctxt))
+ if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsEthiopic", &code))
return(NULL);
- ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
- c_retval = namePop(ctxt);
- py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+ c_retval = xmlUCSIsEthiopic(code);
+ py_retval = libxml_intWrap((int) c_retval);
return(py_retval);
}
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
PyObject *
libxml_xmlParseContent(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
xmlParserCtxtPtr ctxt;
@@ -9733,22 +9745,6 @@ libxml_xmlNodeAddContent(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
return(Py_None);
}
-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);
-}
-
#if defined(LIBXML_XPATH_ENABLED)
PyObject *
libxml_xmlXPathNewParserContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
@@ -11866,22 +11862,22 @@ libxml_xmlInitGlobals(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_
return(Py_None);
}
-#if defined(LIBXML_UNICODE_ENABLED)
PyObject *
-libxml_xmlUCSIsEthiopic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+libxml_namePop(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
PyObject *py_retval;
- int c_retval;
- int code;
+ const xmlChar * c_retval;
+ xmlParserCtxtPtr ctxt;
+ PyObject *pyobj_ctxt;
- if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsEthiopic", &code))
+ if (!PyArg_ParseTuple(args, (char *)"O:namePop", &pyobj_ctxt))
return(NULL);
+ ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
- c_retval = xmlUCSIsEthiopic(code);
- py_retval = libxml_intWrap((int) c_retval);
+ c_retval = namePop(ctxt);
+ py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
return(py_retval);
}
-#endif /* defined(LIBXML_UNICODE_ENABLED) */
#if defined(LIBXML_HTML_ENABLED)
PyObject *
libxml_htmlParseFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
@@ -12479,6 +12475,21 @@ libxml_xmlBuildRelativeURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
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);
+}
+
#if defined(LIBXML_CATALOG_ENABLED)
PyObject *
libxml_xmlACatalogResolvePublic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
@@ -12514,17 +12525,13 @@ libxml_xmlThrDefParserDebugEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *a
#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);
+libxml_xmlCatalogConvert(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+ PyObject *py_retval;
+ int c_retval;
- xmlFreeCatalog(catal);
- Py_INCREF(Py_None);
- return(Py_None);
+ c_retval = xmlCatalogConvert();
+ py_retval = libxml_intWrap((int) c_retval);
+ return(py_retval);
}
#endif /* defined(LIBXML_CATALOG_ENABLED) */
@@ -13445,28 +13452,20 @@ libxml_xmlUTF8Strpos(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
return(py_retval);
}
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
PyObject *
-libxml_xmlUnsetNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+libxml_xmlCharStrdup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
PyObject *py_retval;
- int c_retval;
- xmlNodePtr node;
- PyObject *pyobj_node;
- xmlNsPtr ns;
- PyObject *pyobj_ns;
- xmlChar * name;
+ xmlChar * c_retval;
+ char * cur;
- if (!PyArg_ParseTuple(args, (char *)"OOz:xmlUnsetNsProp", &pyobj_node, &pyobj_ns, &name))
+ if (!PyArg_ParseTuple(args, (char *)"z:xmlCharStrdup", &cur))
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);
+ c_retval = xmlCharStrdup(cur);
+ py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
return(py_retval);
}
-#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
#if defined(LIBXML_XPATH_ENABLED)
PyObject *
libxml_xmlXPathRegisterNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
@@ -13933,6 +13932,22 @@ libxml_xmlUCSIsAegeanNumbers(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
#endif /* defined(LIBXML_UNICODE_ENABLED) */
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_xmlCheckUTF8(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
PyObject *py_retval;
int c_retval;
diff --git a/python/setup.py b/python/setup.py
index fd3154d..a02d80b 100755
--- a/python/setup.py
+++ b/python/setup.py
@@ -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.6.20",
+ version = "2.6.21",
description = descr,
author = "Daniel Veillard",
author_email = "veillard@redhat.com",
diff --git a/python/tests/Makefile.in b/python/tests/Makefile.in
index a344e07..60338e4 100644
--- a/python/tests/Makefile.in
+++ b/python/tests/Makefile.in
@@ -152,6 +152,7 @@ TEST_PUSH = @TEST_PUSH@
TEST_REGEXPS = @TEST_REGEXPS@
TEST_SAX = @TEST_SAX@
TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_SCHEMATRON = @TEST_SCHEMATRON@
TEST_THREADS = @TEST_THREADS@
TEST_VALID = @TEST_VALID@
TEST_VTIME = @TEST_VTIME@
@@ -187,6 +188,7 @@ WITH_REGEXPS = @WITH_REGEXPS@
WITH_RUN_DEBUG = @WITH_RUN_DEBUG@
WITH_SAX1 = @WITH_SAX1@
WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_SCHEMATRON = @WITH_SCHEMATRON@
WITH_THREADS = @WITH_THREADS@
WITH_TREE = @WITH_TREE@
WITH_TRIO = @WITH_TRIO@
diff --git a/python/tests/tstLastError.py b/python/tests/tstLastError.py
index 442609c..d26e82c 100755
--- a/python/tests/tstLastError.py
+++ b/python/tests/tstLastError.py
@@ -5,6 +5,10 @@ import libxml2
class TestCase(unittest.TestCase):
+ def runTest(self):
+ self.test1()
+ self.test2()
+
def setUp(self):
libxml2.debugMemory(1)
@@ -13,6 +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"
def failUnlessXmlError(self,f,args,exc,domain,code,message,level,file,line):
"""Run function f, with arguments args and expect an exception exc;
@@ -69,4 +75,8 @@ class TestCase(unittest.TestCase):
line=3)
if __name__ == "__main__":
- unittest.main()
+ test = TestCase()
+ test.setUp()
+ test.test1()
+ test.test2()
+ test.tearDown()
diff --git a/relaxng.c b/relaxng.c
index b1d4a77..be5ee99 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -254,6 +254,7 @@ struct _xmlRelaxNGParserCtxt {
#define FLAGS_IGNORABLE 1
#define FLAGS_NEGATIVE 2
#define FLAGS_MIXED_CONTENT 4
+#define FLAGS_NOERROR 8
/**
* xmlRelaxNGInterleaveGroup:
@@ -435,10 +436,12 @@ xmlRngPErrMemory(xmlRelaxNGParserCtxtPtr ctxt, const char *extra)
void *data = NULL;
if (ctxt != NULL) {
- channel = ctxt->error;
+ if (ctxt->serror != NULL)
+ schannel = ctxt->serror;
+ else
+ channel = ctxt->error;
data = ctxt->userData;
ctxt->nbErrors++;
- schannel = ctxt->serror;
}
if (extra)
__xmlRaiseError(schannel, channel, data,
@@ -468,10 +471,12 @@ xmlRngVErrMemory(xmlRelaxNGValidCtxtPtr ctxt, const char *extra)
void *data = NULL;
if (ctxt != NULL) {
- channel = ctxt->error;
+ if (ctxt->serror != NULL)
+ schannel = ctxt->serror;
+ else
+ channel = ctxt->error;
data = ctxt->userData;
ctxt->nbErrors++;
- schannel = ctxt->serror;
}
if (extra)
__xmlRaiseError(schannel, channel, data,
@@ -506,10 +511,12 @@ xmlRngPErr(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node, int error,
void *data = NULL;
if (ctxt != NULL) {
- channel = ctxt->error;
+ if (ctxt->serror != NULL)
+ schannel = ctxt->serror;
+ else
+ channel = ctxt->error;
data = ctxt->userData;
ctxt->nbErrors++;
- schannel = ctxt->serror;
}
__xmlRaiseError(schannel, channel, data,
NULL, node, XML_FROM_RELAXNGP,
@@ -538,10 +545,12 @@ xmlRngVErr(xmlRelaxNGValidCtxtPtr ctxt, xmlNodePtr node, int error,
void *data = NULL;
if (ctxt != NULL) {
- channel = ctxt->error;
+ if (ctxt->serror != NULL)
+ schannel = ctxt->serror;
+ else
+ channel = ctxt->error;
data = ctxt->userData;
ctxt->nbErrors++;
- schannel = ctxt->serror;
}
__xmlRaiseError(schannel, channel, data,
NULL, node, XML_FROM_RELAXNGV,
@@ -1477,14 +1486,14 @@ xmlRelaxNGIncludePop(xmlRelaxNGParserCtxtPtr ctxt)
xmlRelaxNGIncludePtr ret;
if (ctxt->incNr <= 0)
- return (0);
+ return (NULL);
ctxt->incNr--;
if (ctxt->incNr > 0)
ctxt->inc = ctxt->incTab[ctxt->incNr - 1];
else
ctxt->inc = NULL;
ret = ctxt->incTab[ctxt->incNr];
- ctxt->incTab[ctxt->incNr] = 0;
+ ctxt->incTab[ctxt->incNr] = NULL;
return (ret);
}
@@ -1889,14 +1898,14 @@ xmlRelaxNGDocumentPop(xmlRelaxNGParserCtxtPtr ctxt)
xmlRelaxNGDocumentPtr ret;
if (ctxt->docNr <= 0)
- return (0);
+ return (NULL);
ctxt->docNr--;
if (ctxt->docNr > 0)
ctxt->doc = ctxt->docTab[ctxt->docNr - 1];
else
ctxt->doc = NULL;
ret = ctxt->docTab[ctxt->docNr];
- ctxt->docTab[ctxt->docNr] = 0;
+ ctxt->docTab[ctxt->docNr] = NULL;
return (ret);
}
@@ -2220,7 +2229,7 @@ xmlRelaxNGShowValidError(xmlRelaxNGValidCtxtPtr ctxt,
{
xmlChar *msg;
- if (ctxt->error == NULL)
+ if (ctxt->flags & FLAGS_NOERROR)
return;
#ifdef DEBUG_ERROR
@@ -2332,7 +2341,9 @@ xmlRelaxNGAddValidError(xmlRelaxNGValidCtxtPtr ctxt,
xmlRelaxNGValidErr err, const xmlChar * arg1,
const xmlChar * arg2, int dup)
{
- if ((ctxt == NULL) || (ctxt->error == NULL))
+ if (ctxt == NULL)
+ return;
+ if (ctxt->flags & FLAGS_NOERROR)
return;
#ifdef DEBUG_ERROR
@@ -3739,10 +3750,10 @@ xmlRelaxNGCompareNameClasses(xmlRelaxNGDefinePtr def1,
xmlNs ns;
xmlRelaxNGValidCtxt ctxt;
- ctxt.flags = FLAGS_IGNORABLE;
-
memset(&ctxt, 0, sizeof(xmlRelaxNGValidCtxt));
+ ctxt.flags = FLAGS_IGNORABLE | FLAGS_NOERROR;
+
if ((def1->type == XML_RELAXNG_ELEMENT) ||
(def1->type == XML_RELAXNG_ATTRIBUTE)) {
if (def2->type == XML_RELAXNG_TEXT)
@@ -7469,6 +7480,7 @@ xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
return;
ctxt->error = err;
ctxt->warning = warn;
+ ctxt->serror = NULL;
ctxt->userData = ctx;
}
@@ -8638,8 +8650,6 @@ xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
if (ctxt->errNr > 0)
xmlRelaxNGPopErrors(ctxt, 0);
}
- if (ret == 0)
- xmlRelaxNGNextValue(ctxt);
break;
}
case XML_RELAXNG_LIST:{
@@ -10591,7 +10601,8 @@ xmlRelaxNGNewValidCtxt(xmlRelaxNGPtr schema)
ret->errMax = 0;
ret->err = NULL;
ret->errTab = NULL;
- ret->idref = schema->idref;
+ if (schema != NULL)
+ ret->idref = schema->idref;
ret->states = NULL;
ret->freeState = NULL;
ret->freeStates = NULL;
@@ -10660,6 +10671,27 @@ xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
ctxt->error = err;
ctxt->warning = warn;
ctxt->userData = ctx;
+ ctxt->serror = NULL;
+}
+
+/**
+ * xmlRelaxNGSetValidStructuredErrors:
+ * @ctxt: a Relax-NG validation context
+ * @serror: the structured error function
+ * @ctx: the functions context
+ *
+ * Set the structured error callback
+ */
+void
+xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt,
+ xmlStructuredErrorFunc serror, void *ctx)
+{
+ if (ctxt == NULL)
+ return;
+ ctxt->serror = serror;
+ ctxt->error = NULL;
+ ctxt->warning = NULL;
+ ctxt->userData = ctx;
}
/**
diff --git a/result/HTML/Down.html b/result/HTML/Down.html
index cd99aa1..929ed8a 100644
--- a/result/HTML/Down.html
+++ b/result/HTML/Down.html
@@ -3,10 +3,8 @@
<head><title>This service is temporary down</title></head>
<body bgcolor="#FFFFFF">
<h1 align="center">Sorry, this service is temporary down</h1>
-<p>
We are doing our best to get it back on-line,
-</p>
<p>The W3C system administrators</p>
</body>
</html>
diff --git a/result/HTML/Down.html.sax b/result/HTML/Down.html.sax
index a8c32c9..c23c332 100644
--- a/result/HTML/Down.html.sax
+++ b/result/HTML/Down.html.sax
@@ -16,19 +16,17 @@ SAX.ignorableWhitespace(
, 2)
SAX.startElement(body, bgcolor='#FFFFFF')
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(h1, align='center')
SAX.characters(Sorry, this service is tempora, 37)
SAX.endElement(h1)
-SAX.startElement(p)
SAX.characters(
We are doing our best to get , 48)
-SAX.endElement(p)
SAX.startElement(p)
SAX.characters(The W3C system administrators, 29)
SAX.endElement(p)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.endElement(body)
SAX.ignorableWhitespace(
diff --git a/result/HTML/attrents.html b/result/HTML/attrents.html
index 3231d1e..0433f48 100644
--- a/result/HTML/attrents.html
+++ b/result/HTML/attrents.html
@@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html><body bgcolor="#FFFFFF">
-<a href="mailto:katherine@cbfanc.org,website@bis.doc.gov?subject=South%20San%20Francisco%20BIS%20Seminar%20-%20October%2016th"></a><br>
+<html><body bgcolor="#FFFFFF">
+ <a href="mailto:katherine@cbfanc.org,website@bis.doc.gov?subject=South%20San%20Francisco%20BIS%20Seminar%20-%20October%2016th"></a><br>
</body></html>
diff --git a/result/HTML/attrents.html.sax b/result/HTML/attrents.html.sax
index 976bbbe..c1cfb42 100644
--- a/result/HTML/attrents.html.sax
+++ b/result/HTML/attrents.html.sax
@@ -4,13 +4,13 @@ SAX.startElement(html)
SAX.ignorableWhitespace(
, 2)
SAX.startElement(body, bgcolor='#FFFFFF')
-SAX.ignorableWhitespace(
+SAX.characters(
, 18)
SAX.startElement(a, href='mailto:katherine@cbfanc.org,website@bis.doc.gov?subject=South San Francisco BIS Seminar - October 16th')
SAX.endElement(a)
SAX.startElement(br)
SAX.endElement(br)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.endElement(body)
SAX.ignorableWhitespace(
diff --git a/result/HTML/cf_128.html b/result/HTML/cf_128.html
index 8c4f11a..b3e6b41 100644
--- a/result/HTML/cf_128.html
+++ b/result/HTML/cf_128.html
@@ -1,7 +1,9 @@
<!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>
-<body><table border="4"><tr>
+<body>
+
+<table border="4"><tr>
<td bgcolor="white">
Foo1
<table border="4"><tr><td>Foo2<p></p>
@@ -9,5 +11,6 @@
</td></tr></table>
</td>
<td bgcolor="blue">Foo3</td>
- </tr></table></body>
+ </tr></table>
+</body>
</html>
diff --git a/result/HTML/cf_128.html.sax b/result/HTML/cf_128.html.sax
index 8aa82c1..8f66a42 100644
--- a/result/HTML/cf_128.html.sax
+++ b/result/HTML/cf_128.html.sax
@@ -16,7 +16,7 @@ SAX.endElement(head)
SAX.ignorableWhitespace(
, 1)
SAX.startElement(body)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(table, border='4')
@@ -58,7 +58,7 @@ SAX.endElement(tr)
SAX.characters(
, 3)
SAX.endElement(table)
-SAX.ignorableWhitespace(
+SAX.characters(
, 3)
SAX.endElement(body)
SAX.ignorableWhitespace(
diff --git a/result/HTML/doc2.htm b/result/HTML/doc2.htm
index 0446695..2c7e230 100644
--- a/result/HTML/doc2.htm
+++ b/result/HTML/doc2.htm
@@ -20,7 +20,9 @@
</frameset>
<noframes>
- <body bgcolor="#FFFFFF" text="#000000" link="#000080" vlink="#000080" alink="#000080" topmargin="0" leftmargin="0" marginheight="0" marginwidth="0"><p>This page uses frames, but your browser doesn't support them.</p></body>
+ <body bgcolor="#FFFFFF" text="#000000" link="#000080" vlink="#000080" alink="#000080" topmargin="0" leftmargin="0" marginheight="0" marginwidth="0">
+ <p>This page uses frames, but your browser doesn't support them.</p>
+ </body>
</noframes>
</frameset>
</html>
diff --git a/result/HTML/doc2.htm.sax b/result/HTML/doc2.htm.sax
index 27d458a..7cbbc51 100644
--- a/result/HTML/doc2.htm.sax
+++ b/result/HTML/doc2.htm.sax
@@ -51,12 +51,12 @@ SAX.characters(
, 4)
SAX.startElement(body, bgcolor='#FFFFFF', text='#000000', link='#000080', vlink='#000080', alink='#000080', topmargin='0', leftmargin='0', marginheight='0', marginwidth='0')
-SAX.ignorableWhitespace(
+SAX.characters(
, 3)
SAX.startElement(p)
SAX.characters(This page uses frames, but you, 61)
SAX.endElement(p)
-SAX.ignorableWhitespace(
+SAX.characters(
, 3)
SAX.endElement(body)
SAX.characters(
diff --git a/result/HTML/doc3.htm b/result/HTML/doc3.htm
index ef6fddd..a53c27b 100644
--- a/result/HTML/doc3.htm
+++ b/result/HTML/doc3.htm
@@ -32,7 +32,7 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
// End -->
</script><meta content="MSHTML 5.00.3103.1000" name="GENERATOR">
</head>
-<body alink="red" bgcolor="black" link="red" text="white" vlink="red">
+<body alink="red" bgcolor="black" link="red" text="white" vlink="red">
<p>
</p>
<div align="center">
@@ -439,7 +439,7 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
</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>
-</div>
+</div>
<script> window.open=NS_ActualOpen; </script>
</body>
</html>
diff --git a/result/HTML/doc3.htm.sax b/result/HTML/doc3.htm.sax
index 93f5a9f..2cc38fa 100644
--- a/result/HTML/doc3.htm.sax
+++ b/result/HTML/doc3.htm.sax
@@ -73,7 +73,7 @@ SAX.endElement(head)
SAX.ignorableWhitespace(
, 2)
SAX.startElement(body, alink='red', bgcolor='black', link='red', text='white', vlink='red')
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(p)
SAX.characters(
@@ -2905,12 +2905,12 @@ SAX.comment( <TR> <TD WIDTH="780"> <P ALIGN="CENTER"><FONT SIZE="1" COLOR="#9
SAX.endElement(tbody)
SAX.endElement(table)
SAX.endElement(div)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(script)
SAX.cdata( window.open=NS_ActualOpen; , 28)
SAX.endElement(script)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.endElement(body)
SAX.endElement(html)
diff --git a/result/HTML/fp40.htm b/result/HTML/fp40.htm
index e78b8bd..a1244dd 100644
--- a/result/HTML/fp40.htm
+++ b/result/HTML/fp40.htm
@@ -44,7 +44,8 @@ configuration file, usually http.conf. To prevent the server extensions from usi
configuration files (access.conf, srm.conf), add the following lines to http.conf:</p>
-</font><blockquote>
+</font>
+<blockquote>
<font face="Courier New">
ResourceConfig /dev/null&nbsp;<br>
AccessConfig /dev/null</font>
diff --git a/result/HTML/fp40.htm.sax b/result/HTML/fp40.htm.sax
index 3859458..6f77794 100644
--- a/result/HTML/fp40.htm.sax
+++ b/result/HTML/fp40.htm.sax
@@ -26,7 +26,7 @@ SAX.ignorableWhitespace(
, 2)
SAX.startElement(body)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(font, face='Verdana')
SAX.characters(
@@ -167,7 +167,7 @@ SAX.characters(
, 3)
SAX.endElement(font)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(blockquote)
SAX.characters(
@@ -184,7 +184,7 @@ SAX.endElement(font)
SAX.characters(
, 1)
SAX.endElement(blockquote)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(font, face='Verdana')
SAX.characters(
@@ -452,7 +452,7 @@ SAX.characters(
, 4)
SAX.endElement(font)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.endElement(body)
SAX.ignorableWhitespace(
diff --git a/result/HTML/liclose.html b/result/HTML/liclose.html
index b8a464e..f4e4edb 100644
--- a/result/HTML/liclose.html
+++ b/result/HTML/liclose.html
@@ -1,10 +1,12 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head><title></title></head>
-<body><ul>
+<body>
+<ul>
<li>First item
</li>
<li>Second item, closes the first one
</li>
-</ul></body>
+</ul>
+</body>
</html>
diff --git a/result/HTML/liclose.html.sax b/result/HTML/liclose.html.sax
index 30f26c0..eabcdf6 100644
--- a/result/HTML/liclose.html.sax
+++ b/result/HTML/liclose.html.sax
@@ -15,7 +15,7 @@ SAX.endElement(head)
SAX.ignorableWhitespace(
, 1)
SAX.startElement(body)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(ul)
SAX.characters(
@@ -28,7 +28,7 @@ SAX.startElement(li)
SAX.characters(Second item, closes the first , 34)
SAX.endElement(li)
SAX.endElement(ul)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.endElement(body)
diff --git a/result/HTML/pre.html b/result/HTML/pre.html
index 17f5b3f..5308b6d 100644
--- a/result/HTML/pre.html
+++ b/result/HTML/pre.html
@@ -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><pre><a href="toto"></a><img src="titi"></pre></body></html>
+<html><body>
+<pre><a href="toto"></a><img src="titi"></pre>
+</body></html>
diff --git a/result/HTML/pre.html.sax b/result/HTML/pre.html.sax
index 4f567ae..f8782b7 100644
--- a/result/HTML/pre.html.sax
+++ b/result/HTML/pre.html.sax
@@ -4,7 +4,7 @@ SAX.startElement(html)
SAX.ignorableWhitespace(
, 1)
SAX.startElement(body)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(pre)
SAX.startElement(a, href='toto')
@@ -12,7 +12,7 @@ SAX.endElement(a)
SAX.startElement(img, src='titi')
SAX.endElement(img)
SAX.endElement(pre)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.endElement(body)
SAX.ignorableWhitespace(
diff --git a/result/HTML/python.html b/result/HTML/python.html
index e5f9d56..5fdc6a2 100644
--- a/result/HTML/python.html
+++ b/result/HTML/python.html
@@ -1,5 +1,6 @@
<!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>
-<body></body>
+<body>
+</body>
</html>
diff --git a/result/HTML/python.html.sax b/result/HTML/python.html.sax
index 4f96e8a..665539c 100644
--- a/result/HTML/python.html.sax
+++ b/result/HTML/python.html.sax
@@ -20,7 +20,7 @@ SAX.endElement(head)
SAX.ignorableWhitespace(
, 1)
SAX.startElement(body)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.endElement(body)
SAX.endElement(html)
diff --git a/result/HTML/reg1.html.sax b/result/HTML/reg1.html.sax
index 1ca0271..c8ee3ac 100644
--- a/result/HTML/reg1.html.sax
+++ b/result/HTML/reg1.html.sax
@@ -15,12 +15,12 @@ SAX.endElement(head)
SAX.ignorableWhitespace(
, 1)
SAX.startElement(body)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(h1)
SAX.characters(Regression test 1, 17)
SAX.endElement(h1)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(p)
SAX.characters(
diff --git a/result/HTML/reg2.html.sax b/result/HTML/reg2.html.sax
index 63acfd4..f85691e 100644
--- a/result/HTML/reg2.html.sax
+++ b/result/HTML/reg2.html.sax
@@ -15,12 +15,12 @@ SAX.endElement(head)
SAX.ignorableWhitespace(
, 1)
SAX.startElement(body)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(h1)
SAX.characters(Regression test 2, 17)
SAX.endElement(h1)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(p)
SAX.characters(
diff --git a/result/HTML/reg3.html.sax b/result/HTML/reg3.html.sax
index 5d498b2..ec0f039 100644
--- a/result/HTML/reg3.html.sax
+++ b/result/HTML/reg3.html.sax
@@ -15,12 +15,12 @@ SAX.endElement(head)
SAX.ignorableWhitespace(
, 1)
SAX.startElement(body)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(h1)
SAX.characters(Regression test 3, 17)
SAX.endElement(h1)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(p)
SAX.characters(
@@ -29,7 +29,7 @@ Autoclose of tag P
SAX.endElement(p)
SAX.startElement(hr)
SAX.endElement(hr)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(p)
SAX.characters(
diff --git a/result/HTML/reg4.html.sax b/result/HTML/reg4.html.sax
index 5a4eacf..4c5147c 100644
--- a/result/HTML/reg4.html.sax
+++ b/result/HTML/reg4.html.sax
@@ -15,12 +15,12 @@ SAX.endElement(head)
SAX.ignorableWhitespace(
, 1)
SAX.startElement(body)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(h1)
SAX.characters(Regression test 4, 17)
SAX.endElement(h1)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(p)
SAX.characters(
@@ -29,10 +29,10 @@ Wrong close of tag P
SAX.endElement(p)
SAX.startElement(hr)
SAX.endElement(hr)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.error: Unexpected end tag : p
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.endElement(body)
SAX.ignorableWhitespace(
diff --git a/result/HTML/script.html.sax b/result/HTML/script.html.sax
index 3a47061..b259f7f 100644
--- a/result/HTML/script.html.sax
+++ b/result/HTML/script.html.sax
@@ -11,17 +11,17 @@ SAX.endElement(head)
SAX.ignorableWhitespace(
, 1)
SAX.startElement(body)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(script, language='javascript')
SAX.cdata(
if (window.open&lt;max) ;, 28)
SAX.endElement(script)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(input, onclick='if(window.open&lt;max);')
SAX.endElement(input)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.endElement(body)
SAX.ignorableWhitespace(
diff --git a/result/HTML/script2.html b/result/HTML/script2.html
new file mode 100644
index 0000000..2be4f93
--- /dev/null
+++ b/result/HTML/script2.html
@@ -0,0 +1,16 @@
+<!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">
+<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>
+ Příliš žluťoučký kůŠúpěl ďábelksé ódy;
+ </p>
+</div>
+</body>
+</html>
diff --git a/result/HTML/script2.html.err b/result/HTML/script2.html.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/HTML/script2.html.err
diff --git a/result/HTML/script2.html.sax b/result/HTML/script2.html.sax
new file mode 100644
index 0000000..1971991
--- /dev/null
+++ b/result/HTML/script2.html.sax
@@ -0,0 +1,50 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(html, -//W3C//DTD XHTML 1.0 Strict//EN, http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd)
+SAX.startElement(html, xmlns='http://www.w3.org/1999/xhtml')
+SAX.ignorableWhitespace(
+ , 2)
+SAX.startElement(head)
+SAX.ignorableWhitespace(
+ , 3)
+SAX.startElement(meta, http-equiv='Content-Type', content='text/html; charset=UTF-8')
+SAX.endElement(meta)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(title)
+SAX.characters(Test Page, 9)
+SAX.endElement(title)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(head)
+SAX.ignorableWhitespace(
+, 1)
+SAX.startElement(body)
+SAX.characters(
+, 1)
+SAX.startElement(div, id='portal')
+SAX.characters(
+, 1)
+SAX.startElement(script, type='text/javascript')
+SAX.cdata(
+ documen.write("P&#345;, 74)
+SAX.endElement(script)
+SAX.characters(
+ , 2)
+SAX.startElement(p)
+SAX.characters(
+ P&#345;&iacute;li&scaron; , 58)
+SAX.endElement(p)
+SAX.characters(
+, 1)
+SAX.endElement(div)
+SAX.characters(
+, 1)
+SAX.endElement(body)
+SAX.ignorableWhitespace(
+, 1)
+SAX.endElement(html)
+SAX.ignorableWhitespace(
+
+, 2)
+SAX.endDocument()
diff --git a/result/HTML/test2.html b/result/HTML/test2.html
index ef62dc6..98a2716 100644
--- a/result/HTML/test2.html
+++ b/result/HTML/test2.html
@@ -2,6 +2,7 @@
<html>
<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">
diff --git a/result/HTML/test2.html.sax b/result/HTML/test2.html.sax
index 03f7285..78bb090 100644
--- a/result/HTML/test2.html.sax
+++ b/result/HTML/test2.html.sax
@@ -11,7 +11,7 @@ SAX.endElement(head)
SAX.ignorableWhitespace(
, 1)
SAX.startElement(body, bgcolor='White', link='Blue', text='Black', vlink='Black', alink='Red')
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(center)
@@ -130,7 +130,7 @@ SAX.endElement(font)
SAX.characters(
, 1)
SAX.endElement(center)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(p)
SAX.characters(
diff --git a/result/HTML/test3.html b/result/HTML/test3.html
index 4437f4d..903723c 100644
--- a/result/HTML/test3.html
+++ b/result/HTML/test3.html
@@ -38,7 +38,7 @@
<dt><h4>Class <a href="ProblemDomain.Note.html#ProblemDomain.Note">ProblemDomain.Note</a>
</h4></dt>
</dl>
-<h4><b>Links</b></h4>
+<h4><b>Links</b></h4>
<ul><li>
<b>Link to </b><a href="HumanInterface.Package.html#HumanInterface.Package">HumanInterface</a>
</li></ul>
diff --git a/result/HTML/test3.html.sax b/result/HTML/test3.html.sax
index 1f76e50..c9f6638 100644
--- a/result/HTML/test3.html.sax
+++ b/result/HTML/test3.html.sax
@@ -26,7 +26,7 @@ SAX.endElement(p)
SAX.startElement(hr)
SAX.endElement(hr)
SAX.error: Unexpected end tag : p
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(dl)
SAX.characters(
@@ -59,14 +59,14 @@ SAX.characters(Interface, thats stores and ma, 58)
SAX.endElement(dd)
SAX.endElement(dd)
SAX.endElement(dl)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(p)
SAX.endElement(p)
SAX.startElement(hr)
SAX.endElement(hr)
SAX.error: Unexpected end tag : p
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(dl)
SAX.characters(
@@ -163,7 +163,7 @@ SAX.endElement(dt)
SAX.characters(
, 2)
SAX.endElement(dl)
-SAX.ignorableWhitespace(
+SAX.characters(
, 4)
SAX.startElement(h4)
@@ -173,7 +173,7 @@ SAX.error: Opening and ending tag mismatch: h4 and b
SAX.endElement(b)
SAX.endElement(h4)
SAX.error: Unexpected end tag : b
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(ul)
SAX.startElement(li)
@@ -185,11 +185,11 @@ SAX.characters(HumanInterface, 14)
SAX.endElement(a)
SAX.endElement(li)
SAX.endElement(ul)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(dir)
SAX.endElement(dir)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(ul)
SAX.startElement(li)
@@ -201,11 +201,11 @@ SAX.characters(DataManagement.FlatFile, 23)
SAX.endElement(a)
SAX.endElement(li)
SAX.endElement(ul)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(dir)
SAX.endElement(dir)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(ul)
SAX.startElement(li)
@@ -217,11 +217,11 @@ SAX.characters(DataManagement, 14)
SAX.endElement(a)
SAX.endElement(li)
SAX.endElement(ul)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(dir)
SAX.endElement(dir)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.endElement(body)
SAX.endElement(html)
diff --git a/result/HTML/wired.html b/result/HTML/wired.html
index 674623f..f7123e8 100644
--- a/result/HTML/wired.html
+++ b/result/HTML/wired.html
@@ -2,6 +2,7 @@
<!-- Vignette StoryServer 4 Fri Oct 15 11:37:12 1999 --><html>
<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">
<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">
@@ -69,7 +70,8 @@
</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><table border="0" width="600" cellspacing="0" cellpadding="0">
+<!-- WIRED NEWS header --><!-- CMD_HOST = scoop.hotwired.com --><a name="#"></a>
+<table border="0" width="600" cellspacing="0" cellpadding="0">
<tr>
<td></td>
<td colspan="2"><img src="http://static.wired.com/news/images/spacer.gif" height="5" width="447" alt=""></td>
diff --git a/result/HTML/wired.html.sax b/result/HTML/wired.html.sax
index 0edd57e..3860c76 100644
--- a/result/HTML/wired.html.sax
+++ b/result/HTML/wired.html.sax
@@ -8,7 +8,7 @@ SAX.characters(Top Stories News from Wired Ne, 32)
SAX.endElement(title)
SAX.endElement(head)
SAX.startElement(body, bgcolor='#FFFFFF', text='#000000', link='#333399', vlink='#660066', alink='#666699')
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(table, border='0', width='600', cellspacing='0', cellpadding='0')
@@ -315,19 +315,19 @@ SAX.endElement(tr)
SAX.characters(
, 1)
SAX.endElement(table)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.comment( WIRED NEWS header )
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.comment( CMD_HOST = scoop.hotwired.com )
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(a, name='#')
SAX.endElement(a)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.startElement(table, border='0', width='600', cellspacing='0', cellpadding='0')
SAX.characters(
@@ -574,14 +574,14 @@ SAX.comment(
SAX.characters(
, 1)
SAX.endElement(table)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.comment( end WIRED NEWS header )
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.comment( begin upper left side Navigation )
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(table, border='0', cellpadding='3', cellspacing='0', align='LEFT', bgcolor='#FFFFFF')
@@ -1463,14 +1463,14 @@ SAX.characters(
, 2)
SAX.endElement(table)
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.comment( end lower left side Navigation )
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.comment( CONTENT TABLE )
-SAX.ignorableWhitespace(
+SAX.characters(
, 2)
SAX.startElement(table, border='0', width='447', cellspacing='0', cellpadding='0', bordercolor='#66FF00')
@@ -2830,13 +2830,13 @@ SAX.endElement(tr)
SAX.characters(
, 1)
SAX.endElement(table)
-SAX.ignorableWhitespace(
+SAX.characters(
, 3)
SAX.startElement(br)
SAX.endElement(br)
-SAX.ignorableWhitespace(
+SAX.characters(
, 1)
SAX.endElement(body)
SAX.ignorableWhitespace(
diff --git a/result/ent2.sax b/result/ent2.sax
index 382bac1..07d2ce4 100644
--- a/result/ent2.sax
+++ b/result/ent2.sax
@@ -11,6 +11,7 @@ SAX.characters(
, 3)
SAX.getEntity(title)
SAX.error: Entity 'title' not defined
+SAX.reference(title)
SAX.characters(
This text is about XML, the, 31)
SAX.getEntity(xml)
diff --git a/result/ent2.sax2 b/result/ent2.sax2
index 8c28ea9..d7c8002 100644
--- a/result/ent2.sax2
+++ b/result/ent2.sax2
@@ -11,6 +11,7 @@ SAX.characters(
, 3)
SAX.getEntity(title)
SAX.error: Entity 'title' not defined
+SAX.reference(title)
SAX.characters(
This text is about XML, the, 31)
SAX.getEntity(xml)
diff --git a/result/ent7.sax b/result/ent7.sax
index 0d5befa..3228de3 100644
--- a/result/ent7.sax
+++ b/result/ent7.sax
@@ -11,6 +11,7 @@ SAX.error: PEReference: %sampleEnt; not found
SAX.characters('they called me , 16)
SAX.getEntity(sampleEnt)
SAX.error: Entity 'sampleEnt' not defined
+SAX.reference(sampleEnt)
SAX.characters(', 1)
SAX.endDocument()
xmlSAXUserParseFile returned error 27
diff --git a/result/ent7.sax2 b/result/ent7.sax2
index 0d5befa..3228de3 100644
--- a/result/ent7.sax2
+++ b/result/ent7.sax2
@@ -11,6 +11,7 @@ SAX.error: PEReference: %sampleEnt; not found
SAX.characters('they called me , 16)
SAX.getEntity(sampleEnt)
SAX.error: Entity 'sampleEnt' not defined
+SAX.reference(sampleEnt)
SAX.characters(', 1)
SAX.endDocument()
xmlSAXUserParseFile returned error 27
diff --git a/result/expr/base b/result/expr/base
new file mode 100644
index 0000000..9ab0d19
--- /dev/null
+++ b/result/expr/base
@@ -0,0 +1,85 @@
+Expression: a
+Subexp: a => accept, Ok
+Subexp: a | a => accept, Ok
+Subexp: b => reject, Ok
+Expression: a|b
+Subexp: a => accept, Ok
+Subexp: b => accept, Ok
+Subexp: a | b => accept, Ok
+Subexp: a{0} => reject, Ok
+Subexp: b{0} => reject, Ok
+Expression: a | b | a
+Subexp: a => accept, Ok
+Subexp: b => accept, Ok
+Subexp: a | b => accept, Ok
+Subexp: b | a => accept, Ok
+Subexp: a | b | b => accept, Ok
+Subexp: a | b | a => accept, Ok
+Subexp: b | a | b => accept, Ok
+Expression: a,a
+Subexp: a,a => accept, Ok
+Subexp: a => reject, Ok
+Subexp: a,a,a => reject, Ok
+Expression: a{0,3}
+Subexp: a{3} => accept, Ok
+Subexp: a => accept, Ok
+Subexp: a,a,a => accept, Ok
+Subexp: a{1,3} => accept, Ok
+Expression: (a|b){0,4}
+Subexp: a => accept, Ok
+Subexp: b => accept, Ok
+Subexp: a,b => accept, Ok
+Subexp: a,b,a,b => accept, Ok
+Subexp: b,a,b,a,b => reject, Ok
+Subexp: b,a{1,3} => accept, Ok
+Subexp: a{1,3},b => accept, Ok
+Subexp: a{1,3},b,a => reject, Ok
+Subexp: a{1,4},b => reject, Ok
+Subexp: a{0,5} => reject, Ok
+Subexp: (b|a){0,4} => accept, Ok
+Subexp: (b|a){0,4},a => reject, Ok
+Subexp: (a,b){0,2} => accept, Ok
+Subexp: (a,b){0,1},b => accept, Ok
+Expression: a*
+Subexp: a => accept, Ok
+Subexp: a? => accept, Ok
+Subexp: a+ => accept, Ok
+Subexp: a* => accept, Ok
+Subexp: a{0} => accept, Ok
+Expression: a+
+Subexp: a => accept, Ok
+Subexp: a? => reject, Ok
+Subexp: a+ => accept, Ok
+Subexp: a* => reject, Ok
+Subexp: a?,a => accept, Ok
+Subexp: a,a* => accept, Ok
+Subexp: a*,a => accept, Ok
+Subexp: a?,a*,a => accept, Ok
+Subexp: a*,a?,a => accept, Ok
+Expression: (a|b)*
+Subexp: a => accept, Ok
+Subexp: b => accept, Ok
+Subexp: a,b => accept, Ok
+Subexp: a,b,a,b => accept, Ok
+Subexp: (b|a){0,4} => accept, Ok
+Subexp: (b|a){0,4},a => accept, Ok
+Subexp: a* => accept, Ok
+Subexp: b* => accept, Ok
+Subexp: (a|b)* => accept, Ok
+Subexp: a{1,3} => accept, Ok
+Subexp: b,a{1,3} => accept, Ok
+Subexp: a{1,3},b => accept, Ok
+Subexp: a*,(a|b)* => accept, Ok
+Subexp: a*,b{2,5} => accept, Ok
+Subexp: a*,(a|b)*,b{2,5} => accept, Ok
+Expression: (a|b)+,(c|d)
+Subexp: a+,c => accept, Ok
+Subexp: a*,c => reject, Ok
+Subexp: a,c => accept, Ok
+Subexp: a,b*,a*,c => accept, Ok
+Expression: (a|b),(a|c){0,100}
+Subexp: a{0,100},(a|c) => accept, Ok
+Subexp: a{0,101},(a|c) => reject, Ok
+Expression: (a, ((b, c, d){0,5}, e{0,1}){0,4}, f)
+Subexp: (a, b, (c, d, b){2,3}, c, d, e, f) => accept, Ok
+Ops: 0 nodes, 221 cons
diff --git a/result/regexp/* b/result/regexp/*
new file mode 100644
index 0000000..b730347
--- /dev/null
+++ b/result/regexp/*
@@ -0,0 +1 @@
+Ops: 0 nodes, 0 cons
diff --git a/result/relaxng/307377_0 b/result/relaxng/307377_0
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/307377_0
diff --git a/result/relaxng/307377_0.err b/result/relaxng/307377_0.err
new file mode 100644
index 0000000..1f465bb
--- /dev/null
+++ b/result/relaxng/307377_0.err
@@ -0,0 +1,2 @@
+./test/relaxng/307377_0.xml:1: element number: Relax-NG validity error : Element number failed to validate attributes
+./test/relaxng/307377_0.xml fails to validate
diff --git a/result/relaxng/307377_1 b/result/relaxng/307377_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/307377_1
diff --git a/result/relaxng/307377_1.err b/result/relaxng/307377_1.err
new file mode 100644
index 0000000..abfb533
--- /dev/null
+++ b/result/relaxng/307377_1.err
@@ -0,0 +1,3 @@
+./test/relaxng/307377_1.xml:1: element number: Relax-NG validity error : Extra data in list: a
+./test/relaxng/307377_1.xml:1: element number: Relax-NG validity error : Element number failed to validate attributes
+./test/relaxng/307377_1.xml fails to validate
diff --git a/result/relaxng/307377_2 b/result/relaxng/307377_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/307377_2
diff --git a/result/relaxng/307377_2.err b/result/relaxng/307377_2.err
new file mode 100644
index 0000000..158ea42
--- /dev/null
+++ b/result/relaxng/307377_2.err
@@ -0,0 +1 @@
+./test/relaxng/307377_2.xml validates
diff --git a/result/relaxng/307377_err b/result/relaxng/307377_err
new file mode 100644
index 0000000..5705eab
--- /dev/null
+++ b/result/relaxng/307377_err
@@ -0,0 +1 @@
+./test/relaxng/307377.rng validates
diff --git a/result/relaxng/307377_valid b/result/relaxng/307377_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/307377_valid
diff --git a/result/schemas/allsg_0_0 b/result/schemas/allsg_0_0
new file mode 100644
index 0000000..a078f05
--- /dev/null
+++ b/result/schemas/allsg_0_0
@@ -0,0 +1 @@
+./test/schemas/allsg_0.xml validates
diff --git a/result/schemas/allsg_0_0.err b/result/schemas/allsg_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/allsg_0_0.err
diff --git a/result/schemas/allsg_0_1 b/result/schemas/allsg_0_1
new file mode 100644
index 0000000..ab3cf58
--- /dev/null
+++ b/result/schemas/allsg_0_1
@@ -0,0 +1 @@
+./test/schemas/allsg_1.xml validates
diff --git a/result/schemas/allsg_0_1.err b/result/schemas/allsg_0_1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/allsg_0_1.err
diff --git a/result/schemas/allsg_0_2 b/result/schemas/allsg_0_2
new file mode 100644
index 0000000..da3de52
--- /dev/null
+++ b/result/schemas/allsg_0_2
@@ -0,0 +1 @@
+./test/schemas/allsg_2.xml validates
diff --git a/result/schemas/allsg_0_2.err b/result/schemas/allsg_0_2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/allsg_0_2.err
diff --git a/result/schemas/allsg_0_3 b/result/schemas/allsg_0_3
new file mode 100644
index 0000000..f98152b
--- /dev/null
+++ b/result/schemas/allsg_0_3
@@ -0,0 +1 @@
+./test/schemas/allsg_3.xml fails to validate
diff --git a/result/schemas/allsg_0_3.err b/result/schemas/allsg_0_3.err
new file mode 100644
index 0000000..756473b
--- /dev/null
+++ b/result/schemas/allsg_0_3.err
@@ -0,0 +1 @@
+./test/schemas/allsg_3.xml:6: element gm-B-1: Schemas validity error : Element '{urn:test:foo}gm-B-1': This element is not expected. Expected is one of ( {urn:test:foo}gh-A, {urn:test:foo}gm-A-2, {urn:test:foo}gm-A-1 ).
diff --git a/result/schemas/allsg_0_4 b/result/schemas/allsg_0_4
new file mode 100644
index 0000000..3fe69c1
--- /dev/null
+++ b/result/schemas/allsg_0_4
@@ -0,0 +1 @@
+./test/schemas/allsg_4.xml fails to validate
diff --git a/result/schemas/allsg_0_4.err b/result/schemas/allsg_0_4.err
new file mode 100644
index 0000000..b63fa39
--- /dev/null
+++ b/result/schemas/allsg_0_4.err
@@ -0,0 +1 @@
+./test/schemas/allsg_4.xml:6: element gm-A-1: Schemas validity error : Element '{urn:test:foo}gm-A-1': This element is not expected. Expected is one of ( {urn:test:foo}gh-B, {urn:test:foo}gm-B-2, {urn:test:foo}gm-B-1 ).
diff --git a/result/schemas/allsg_0_5 b/result/schemas/allsg_0_5
new file mode 100644
index 0000000..2689cf0
--- /dev/null
+++ b/result/schemas/allsg_0_5
@@ -0,0 +1 @@
+./test/schemas/allsg_5.xml fails to validate
diff --git a/result/schemas/allsg_0_5.err b/result/schemas/allsg_0_5.err
new file mode 100644
index 0000000..26a1446
--- /dev/null
+++ b/result/schemas/allsg_0_5.err
@@ -0,0 +1 @@
+./test/schemas/allsg_5.xml:7: element gm-B-2: Schemas validity error : Element '{urn:test:foo}gm-B-2': This element is not expected.
diff --git a/result/schemas/any3_0_0.err b/result/schemas/any3_0_0.err
index 19036ce..49ce581 100644
--- a/result/schemas/any3_0_0.err
+++ b/result/schemas/any3_0_0.err
@@ -1 +1 @@
-./test/schemas/any3_0.xml:12: element bar.A: Schemas validity error : Element 'bar.A': This element is not expected. Expected is one of ( {##other:http://FOO}* ).
+./test/schemas/any3_0.xml:12: element bar.A: Schemas validity error : Element 'bar.A': This element is not expected. Expected is ( ##other{http://FOO}* ).
diff --git a/result/schemas/any5_0_0 b/result/schemas/any5_0_0
new file mode 100644
index 0000000..910f8bb
--- /dev/null
+++ b/result/schemas/any5_0_0
@@ -0,0 +1 @@
+./test/schemas/any5_0.xml fails to validate
diff --git a/result/schemas/any5_0_0.err b/result/schemas/any5_0_0.err
new file mode 100644
index 0000000..b69fd57
--- /dev/null
+++ b/result/schemas/any5_0_0.err
@@ -0,0 +1 @@
+./test/schemas/any5_0.xml:6: element boo: Schemas validity error : Element '{urn:test:foo}boo': This element is not expected. Expected is ( ##other{urn:test:foo}* ).
diff --git a/result/schemas/any5_0_1 b/result/schemas/any5_0_1
new file mode 100644
index 0000000..5e2c461
--- /dev/null
+++ b/result/schemas/any5_0_1
@@ -0,0 +1 @@
+./test/schemas/any5_1.xml fails to validate
diff --git a/result/schemas/any5_0_1.err b/result/schemas/any5_0_1.err
new file mode 100644
index 0000000..79d7e35
--- /dev/null
+++ b/result/schemas/any5_0_1.err
@@ -0,0 +1 @@
+./test/schemas/any5_1.xml:11: element boo: Schemas validity error : Element '{urn:test:bar}boo': This element is not expected.
diff --git a/result/schemas/any5_0_2 b/result/schemas/any5_0_2
new file mode 100644
index 0000000..b049478
--- /dev/null
+++ b/result/schemas/any5_0_2
@@ -0,0 +1 @@
+./test/schemas/any5_2.xml fails to validate
diff --git a/result/schemas/any5_0_2.err b/result/schemas/any5_0_2.err
new file mode 100644
index 0000000..a5bf4c0
--- /dev/null
+++ b/result/schemas/any5_0_2.err
@@ -0,0 +1 @@
+./test/schemas/any5_2.xml:7: element boo: Schemas validity error : Element '{urn:test:foo}boo': This element is not expected.
diff --git a/result/schemas/any5_0_3 b/result/schemas/any5_0_3
new file mode 100644
index 0000000..8cfb94e
--- /dev/null
+++ b/result/schemas/any5_0_3
@@ -0,0 +1 @@
+./test/schemas/any5_3.xml validates
diff --git a/result/schemas/any5_0_3.err b/result/schemas/any5_0_3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/any5_0_3.err
diff --git a/result/schemas/any5_0_4 b/result/schemas/any5_0_4
new file mode 100644
index 0000000..0a4bce0
--- /dev/null
+++ b/result/schemas/any5_0_4
@@ -0,0 +1 @@
+./test/schemas/any5_4.xml fails to validate
diff --git a/result/schemas/any5_0_4.err b/result/schemas/any5_0_4.err
new file mode 100644
index 0000000..74a6bda
--- /dev/null
+++ b/result/schemas/any5_0_4.err
@@ -0,0 +1 @@
+./test/schemas/any5_4.xml:11: element boo: Schemas validity error : Element '{urn:test:bar}boo': This element is not expected.
diff --git a/result/schemas/any5_0_5 b/result/schemas/any5_0_5
new file mode 100644
index 0000000..6c15d25
--- /dev/null
+++ b/result/schemas/any5_0_5
@@ -0,0 +1 @@
+./test/schemas/any5_5.xml fails to validate
diff --git a/result/schemas/any5_0_5.err b/result/schemas/any5_0_5.err
new file mode 100644
index 0000000..e50113f
--- /dev/null
+++ b/result/schemas/any5_0_5.err
@@ -0,0 +1 @@
+./test/schemas/any5_5.xml:11: element boo: Schemas validity error : Element '{urn:test:foo}boo': This element is not expected.
diff --git a/result/schemas/any5_0_6 b/result/schemas/any5_0_6
new file mode 100644
index 0000000..c9df562
--- /dev/null
+++ b/result/schemas/any5_0_6
@@ -0,0 +1 @@
+./test/schemas/any5_6.xml fails to validate
diff --git a/result/schemas/any5_0_6.err b/result/schemas/any5_0_6.err
new file mode 100644
index 0000000..b64cd4f
--- /dev/null
+++ b/result/schemas/any5_0_6.err
@@ -0,0 +1 @@
+./test/schemas/any5_6.xml:11: element boo: Schemas validity error : Element '{urn:test:bar}boo': This element is not expected.
diff --git a/result/schemas/any5_1_0 b/result/schemas/any5_1_0
new file mode 100644
index 0000000..910f8bb
--- /dev/null
+++ b/result/schemas/any5_1_0
@@ -0,0 +1 @@
+./test/schemas/any5_0.xml fails to validate
diff --git a/result/schemas/any5_1_0.err b/result/schemas/any5_1_0.err
new file mode 100644
index 0000000..b69fd57
--- /dev/null
+++ b/result/schemas/any5_1_0.err
@@ -0,0 +1 @@
+./test/schemas/any5_0.xml:6: element boo: Schemas validity error : Element '{urn:test:foo}boo': This element is not expected. Expected is ( ##other{urn:test:foo}* ).
diff --git a/result/schemas/any5_1_1 b/result/schemas/any5_1_1
new file mode 100644
index 0000000..5e2c461
--- /dev/null
+++ b/result/schemas/any5_1_1
@@ -0,0 +1 @@
+./test/schemas/any5_1.xml fails to validate
diff --git a/result/schemas/any5_1_1.err b/result/schemas/any5_1_1.err
new file mode 100644
index 0000000..bbfccb4
--- /dev/null
+++ b/result/schemas/any5_1_1.err
@@ -0,0 +1 @@
+./test/schemas/any5_1.xml:11: element boo: Schemas validity error : Element '{urn:test:bar}boo': This element is not expected. Expected is ( {urn:test:foo}boo ).
diff --git a/result/schemas/any5_1_2 b/result/schemas/any5_1_2
new file mode 100644
index 0000000..6eab2bb
--- /dev/null
+++ b/result/schemas/any5_1_2
@@ -0,0 +1 @@
+./test/schemas/any5_2.xml validates
diff --git a/result/schemas/any5_1_2.err b/result/schemas/any5_1_2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/any5_1_2.err
diff --git a/result/schemas/any5_1_3 b/result/schemas/any5_1_3
new file mode 100644
index 0000000..f114a67
--- /dev/null
+++ b/result/schemas/any5_1_3
@@ -0,0 +1 @@
+./test/schemas/any5_3.xml fails to validate
diff --git a/result/schemas/any5_1_3.err b/result/schemas/any5_1_3.err
new file mode 100644
index 0000000..e6c07b2
--- /dev/null
+++ b/result/schemas/any5_1_3.err
@@ -0,0 +1 @@
+./test/schemas/any5_3.xml:4: element foo: Schemas validity error : Element '{urn:test:foo}foo': Missing child element(s).
diff --git a/result/schemas/any5_1_4 b/result/schemas/any5_1_4
new file mode 100644
index 0000000..0a4bce0
--- /dev/null
+++ b/result/schemas/any5_1_4
@@ -0,0 +1 @@
+./test/schemas/any5_4.xml fails to validate
diff --git a/result/schemas/any5_1_4.err b/result/schemas/any5_1_4.err
new file mode 100644
index 0000000..6d89773
--- /dev/null
+++ b/result/schemas/any5_1_4.err
@@ -0,0 +1 @@
+./test/schemas/any5_4.xml:11: element boo: Schemas validity error : Element '{urn:test:bar}boo': This element is not expected. Expected is ( {urn:test:foo}boo ).
diff --git a/result/schemas/any5_1_5 b/result/schemas/any5_1_5
new file mode 100644
index 0000000..e573d46
--- /dev/null
+++ b/result/schemas/any5_1_5
@@ -0,0 +1 @@
+./test/schemas/any5_5.xml validates
diff --git a/result/schemas/any5_1_5.err b/result/schemas/any5_1_5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/any5_1_5.err
diff --git a/result/schemas/any5_1_6 b/result/schemas/any5_1_6
new file mode 100644
index 0000000..c9df562
--- /dev/null
+++ b/result/schemas/any5_1_6
@@ -0,0 +1 @@
+./test/schemas/any5_6.xml fails to validate
diff --git a/result/schemas/any5_1_6.err b/result/schemas/any5_1_6.err
new file mode 100644
index 0000000..8c3f020
--- /dev/null
+++ b/result/schemas/any5_1_6.err
@@ -0,0 +1 @@
+./test/schemas/any5_6.xml:11: element boo: Schemas validity error : Element '{urn:test:bar}boo': This element is not expected. Expected is ( {urn:test:foo}boo ).
diff --git a/result/schemas/any6_1_0 b/result/schemas/any6_1_0
new file mode 100644
index 0000000..1bb493c
--- /dev/null
+++ b/result/schemas/any6_1_0
@@ -0,0 +1 @@
+./test/schemas/any6_0.xml validates
diff --git a/result/schemas/any6_1_0.err b/result/schemas/any6_1_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/any6_1_0.err
diff --git a/result/schemas/any6_2_0 b/result/schemas/any6_2_0
new file mode 100644
index 0000000..1bb493c
--- /dev/null
+++ b/result/schemas/any6_2_0
@@ -0,0 +1 @@
+./test/schemas/any6_0.xml validates
diff --git a/result/schemas/any6_2_0.err b/result/schemas/any6_2_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/any6_2_0.err
diff --git a/result/schemas/any7_1_0 b/result/schemas/any7_1_0
new file mode 100644
index 0000000..cfd9dcc
--- /dev/null
+++ b/result/schemas/any7_1_0
@@ -0,0 +1 @@
+./test/schemas/any7_0.xml fails to validate
diff --git a/result/schemas/any7_1_0.err b/result/schemas/any7_1_0.err
new file mode 100644
index 0000000..a4274f8
--- /dev/null
+++ b/result/schemas/any7_1_0.err
@@ -0,0 +1 @@
+./test/schemas/any7_0.xml:18: element moo: Schemas validity error : Element 'moo': This element is not expected. Expected is ( ##other{urn:test:foo}* ).
diff --git a/result/schemas/any7_1_1 b/result/schemas/any7_1_1
new file mode 100644
index 0000000..2a6f5d7
--- /dev/null
+++ b/result/schemas/any7_1_1
@@ -0,0 +1 @@
+./test/schemas/any7_1.xml fails to validate
diff --git a/result/schemas/any7_1_1.err b/result/schemas/any7_1_1.err
new file mode 100644
index 0000000..8745468
--- /dev/null
+++ b/result/schemas/any7_1_1.err
@@ -0,0 +1 @@
+./test/schemas/any7_1.xml:17: element bar: Schemas validity error : Element '{urn:test:foo}bar': This element is not expected. Expected is ( ##other{urn:test:foo}* ).
diff --git a/result/schemas/any7_1_2 b/result/schemas/any7_1_2
new file mode 100644
index 0000000..6f35e2d
--- /dev/null
+++ b/result/schemas/any7_1_2
@@ -0,0 +1 @@
+./test/schemas/any7_2.xml validates
diff --git a/result/schemas/any7_1_2.err b/result/schemas/any7_1_2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/any7_1_2.err
diff --git a/result/schemas/any7_2_0 b/result/schemas/any7_2_0
new file mode 100644
index 0000000..cfd9dcc
--- /dev/null
+++ b/result/schemas/any7_2_0
@@ -0,0 +1 @@
+./test/schemas/any7_0.xml fails to validate
diff --git a/result/schemas/any7_2_0.err b/result/schemas/any7_2_0.err
new file mode 100644
index 0000000..a4274f8
--- /dev/null
+++ b/result/schemas/any7_2_0.err
@@ -0,0 +1 @@
+./test/schemas/any7_0.xml:18: element moo: Schemas validity error : Element 'moo': This element is not expected. Expected is ( ##other{urn:test:foo}* ).
diff --git a/result/schemas/any7_2_1 b/result/schemas/any7_2_1
new file mode 100644
index 0000000..2a6f5d7
--- /dev/null
+++ b/result/schemas/any7_2_1
@@ -0,0 +1 @@
+./test/schemas/any7_1.xml fails to validate
diff --git a/result/schemas/any7_2_1.err b/result/schemas/any7_2_1.err
new file mode 100644
index 0000000..8745468
--- /dev/null
+++ b/result/schemas/any7_2_1.err
@@ -0,0 +1 @@
+./test/schemas/any7_1.xml:17: element bar: Schemas validity error : Element '{urn:test:foo}bar': This element is not expected. Expected is ( ##other{urn:test:foo}* ).
diff --git a/result/schemas/any7_2_2 b/result/schemas/any7_2_2
new file mode 100644
index 0000000..6f35e2d
--- /dev/null
+++ b/result/schemas/any7_2_2
@@ -0,0 +1 @@
+./test/schemas/any7_2.xml validates
diff --git a/result/schemas/any7_2_2.err b/result/schemas/any7_2_2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/any7_2_2.err
diff --git a/result/schemas/any8_1_0 b/result/schemas/any8_1_0
new file mode 100644
index 0000000..f5f4ed9
--- /dev/null
+++ b/result/schemas/any8_1_0
@@ -0,0 +1 @@
+./test/schemas/any8_0.xml validates
diff --git a/result/schemas/any8_1_0.err b/result/schemas/any8_1_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/any8_1_0.err
diff --git a/result/schemas/bug303566_1_1.err b/result/schemas/bug303566_1_1.err
index 5dc5a59..43515ea 100644
--- a/result/schemas/bug303566_1_1.err
+++ b/result/schemas/bug303566_1_1.err
@@ -1 +1 @@
-./test/schemas/bug303566_1.xml:5: element Country: Schemas validity error : Element 'Country': No match found for key-sequence ['B'] of key reference 'PartRefCountryDummy'.
+./test/schemas/bug303566_1.xml:9: Schemas validity error : Element 'Part': No match found for key-sequence ['B'] of key reference 'PartRefCountryDummy'.
diff --git a/result/schemas/bug310264_0_0 b/result/schemas/bug310264_0_0
new file mode 100644
index 0000000..e07293d
--- /dev/null
+++ b/result/schemas/bug310264_0_0
@@ -0,0 +1 @@
+./test/schemas/bug310264_0.xml validates
diff --git a/result/schemas/bug310264_0_0.err b/result/schemas/bug310264_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/bug310264_0_0.err
diff --git a/result/schemas/bug312957_1_0 b/result/schemas/bug312957_1_0
new file mode 100644
index 0000000..1ec6269
--- /dev/null
+++ b/result/schemas/bug312957_1_0
@@ -0,0 +1 @@
+./test/schemas/bug312957_0.xml fails to validate
diff --git a/result/schemas/bug312957_1_0.err b/result/schemas/bug312957_1_0.err
new file mode 100644
index 0000000..5ab33fb
--- /dev/null
+++ b/result/schemas/bug312957_1_0.err
@@ -0,0 +1 @@
+./test/schemas/bug312957_0.xml:11: Schemas validity error : Element 'sister': No match found for key-sequence ['annie'] of key reference 'sibling_key_ref'.
diff --git a/result/schemas/bug313982_0_0 b/result/schemas/bug313982_0_0
new file mode 100644
index 0000000..19855cf
--- /dev/null
+++ b/result/schemas/bug313982_0_0
@@ -0,0 +1 @@
+./test/schemas/bug313982_0.xml validates
diff --git a/result/schemas/bug313982_0_0.err b/result/schemas/bug313982_0_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/bug313982_0_0.err
diff --git a/result/schemas/extension2_1_0 b/result/schemas/extension2_1_0
new file mode 100644
index 0000000..88c15aa
--- /dev/null
+++ b/result/schemas/extension2_1_0
@@ -0,0 +1 @@
+./test/schemas/extension2_0.xml validates
diff --git a/result/schemas/extension2_1_0.err b/result/schemas/extension2_1_0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/schemas/extension2_1_0.err
diff --git a/result/schematron/zvon10_0 b/result/schematron/zvon10_0
new file mode 100644
index 0000000..9aae4b1
--- /dev/null
+++ b/result/schematron/zvon10_0
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB/>
+</AAA>
diff --git a/result/schematron/zvon10_0.err b/result/schematron/zvon10_0.err
new file mode 100644
index 0000000..524ecd8
--- /dev/null
+++ b/result/schematron/zvon10_0.err
@@ -0,0 +1,5 @@
+Pattern: Open model
+/AAA line 1: CCC element is not present
+Pattern: Closed model
+/AAA line 1: CCC element is not present
+./test/schematron/zvon10_0.xml fails to validate
diff --git a/result/schematron/zvon10_1 b/result/schematron/zvon10_1
new file mode 100644
index 0000000..d82353a
--- /dev/null
+++ b/result/schematron/zvon10_1
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB/>
+ <DDD/>
+</AAA>
diff --git a/result/schematron/zvon10_1.err b/result/schematron/zvon10_1.err
new file mode 100644
index 0000000..9bc361c
--- /dev/null
+++ b/result/schematron/zvon10_1.err
@@ -0,0 +1,6 @@
+Pattern: Open model
+/AAA line 1: CCC element is not present
+Pattern: Closed model
+/AAA line 1: CCC element is not present
+/AAA line 1: There is an extra element
+./test/schematron/zvon10_1.xml fails to validate
diff --git a/result/schematron/zvon11_0 b/result/schematron/zvon11_0
new file mode 100644
index 0000000..49c8005
--- /dev/null
+++ b/result/schematron/zvon11_0
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB aaa="A" bbb="B"/>
+</AAA>
diff --git a/result/schematron/zvon11_0.err b/result/schematron/zvon11_0.err
new file mode 100644
index 0000000..ab4aa74
--- /dev/null
+++ b/result/schematron/zvon11_0.err
@@ -0,0 +1,2 @@
+Pattern: Attributes present
+./test/schematron/zvon11_0.xml validates
diff --git a/result/schematron/zvon11_1 b/result/schematron/zvon11_1
new file mode 100644
index 0000000..a5328e0
--- /dev/null
+++ b/result/schematron/zvon11_1
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB bbb="B"/>
+</AAA>
diff --git a/result/schematron/zvon11_1.err b/result/schematron/zvon11_1.err
new file mode 100644
index 0000000..c1ae243
--- /dev/null
+++ b/result/schematron/zvon11_1.err
@@ -0,0 +1,3 @@
+Pattern: Attributes present
+/AAA/BBB line 2: The element must not have an isolated bbb attribute
+./test/schematron/zvon11_1.xml fails to validate
diff --git a/result/schematron/zvon11_2 b/result/schematron/zvon11_2
new file mode 100644
index 0000000..673a7af
--- /dev/null
+++ b/result/schematron/zvon11_2
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB aaa="A"/>
+</AAA>
diff --git a/result/schematron/zvon11_2.err b/result/schematron/zvon11_2.err
new file mode 100644
index 0000000..35117f7
--- /dev/null
+++ b/result/schematron/zvon11_2.err
@@ -0,0 +1,3 @@
+Pattern: Attributes present
+/AAA/BBB line 2: The element must not have an isolated aaa attribute
+./test/schematron/zvon11_2.xml fails to validate
diff --git a/result/schematron/zvon11_3 b/result/schematron/zvon11_3
new file mode 100644
index 0000000..9aae4b1
--- /dev/null
+++ b/result/schematron/zvon11_3
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB/>
+</AAA>
diff --git a/result/schematron/zvon11_3.err b/result/schematron/zvon11_3.err
new file mode 100644
index 0000000..18517e5
--- /dev/null
+++ b/result/schematron/zvon11_3.err
@@ -0,0 +1,2 @@
+Pattern: Attributes present
+./test/schematron/zvon11_3.xml validates
diff --git a/result/schematron/zvon12_0 b/result/schematron/zvon12_0
new file mode 100644
index 0000000..7220804
--- /dev/null
+++ b/result/schematron/zvon12_0
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB bbb="C"/>
+</AAA>
diff --git a/result/schematron/zvon12_0.err b/result/schematron/zvon12_0.err
new file mode 100644
index 0000000..c7e9ed2
--- /dev/null
+++ b/result/schematron/zvon12_0.err
@@ -0,0 +1,3 @@
+Pattern: Number of characters in an abbreviation
+/AAA/BBB line 2: There is not enough letters in the abbreviation
+./test/schematron/zvon12_0.xml fails to validate
diff --git a/result/schematron/zvon12_1 b/result/schematron/zvon12_1
new file mode 100644
index 0000000..362de34
--- /dev/null
+++ b/result/schematron/zvon12_1
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB bbb="CZ"/>
+</AAA>
diff --git a/result/schematron/zvon12_1.err b/result/schematron/zvon12_1.err
new file mode 100644
index 0000000..486c0be
--- /dev/null
+++ b/result/schematron/zvon12_1.err
@@ -0,0 +1,2 @@
+Pattern: Number of characters in an abbreviation
+./test/schematron/zvon12_1.xml validates
diff --git a/result/schematron/zvon12_2 b/result/schematron/zvon12_2
new file mode 100644
index 0000000..bbbf7c7
--- /dev/null
+++ b/result/schematron/zvon12_2
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB bbb="CZCZ"/>
+</AAA>
diff --git a/result/schematron/zvon12_2.err b/result/schematron/zvon12_2.err
new file mode 100644
index 0000000..5edaf30
--- /dev/null
+++ b/result/schematron/zvon12_2.err
@@ -0,0 +1,3 @@
+Pattern: Number of characters in an abbreviation
+/AAA/BBB line 2: There is too much letters in the abbreviation
+./test/schematron/zvon12_2.xml fails to validate
diff --git a/result/schematron/zvon13_0 b/result/schematron/zvon13_0
new file mode 100644
index 0000000..e1295c3
--- /dev/null
+++ b/result/schematron/zvon13_0
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<Total>
+ <Percent>20</Percent>
+ <Percent>30</Percent>
+ <Percent>10</Percent>
+ <Percent>50</Percent>
+</Total>
diff --git a/result/schematron/zvon13_0.err b/result/schematron/zvon13_0.err
new file mode 100644
index 0000000..ed98cb3
--- /dev/null
+++ b/result/schematron/zvon13_0.err
@@ -0,0 +1,3 @@
+Pattern: Sum equals 100%.
+/Total line 1: The values do not sum to 100%.
+./test/schematron/zvon13_0.xml fails to validate
diff --git a/result/schematron/zvon13_1 b/result/schematron/zvon13_1
new file mode 100644
index 0000000..401e919
--- /dev/null
+++ b/result/schematron/zvon13_1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<Total>
+ <Percent>20</Percent>
+ <Percent>10</Percent>
+ <Percent>50</Percent>
+</Total>
diff --git a/result/schematron/zvon13_1.err b/result/schematron/zvon13_1.err
new file mode 100644
index 0000000..e0f02c2
--- /dev/null
+++ b/result/schematron/zvon13_1.err
@@ -0,0 +1,3 @@
+Pattern: Sum equals 100%.
+/Total line 1: The values do not sum to 100%.
+./test/schematron/zvon13_1.xml fails to validate
diff --git a/result/schematron/zvon13_2 b/result/schematron/zvon13_2
new file mode 100644
index 0000000..cb1df2e
--- /dev/null
+++ b/result/schematron/zvon13_2
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<Total>
+ <Percent>20</Percent>
+ <Percent>30</Percent>
+ <Percent>50</Percent>
+</Total>
diff --git a/result/schematron/zvon13_2.err b/result/schematron/zvon13_2.err
new file mode 100644
index 0000000..dfab61f
--- /dev/null
+++ b/result/schematron/zvon13_2.err
@@ -0,0 +1,2 @@
+Pattern: Sum equals 100%.
+./test/schematron/zvon13_2.xml validates
diff --git a/result/schematron/zvon14_0 b/result/schematron/zvon14_0
new file mode 100644
index 0000000..c72e0c2
--- /dev/null
+++ b/result/schematron/zvon14_0
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB>
+ <CCC/>
+ </BBB>
+ <CCC/>
+ <DDD>
+ <CCC/>
+ <EEE>
+ <CCC/>
+ </EEE>
+ </DDD>
+</AAA>
diff --git a/result/schematron/zvon14_0.err b/result/schematron/zvon14_0.err
new file mode 100644
index 0000000..60155da
--- /dev/null
+++ b/result/schematron/zvon14_0.err
@@ -0,0 +1,4 @@
+Pattern: a child of selected elements
+/AAA/CCC line 5: Element CCC must not be a child of element AAA
+/AAA/DDD/EEE/CCC line 9: Element CCC must not be a child of element EEE
+./test/schematron/zvon14_0.xml fails to validate
diff --git a/result/schematron/zvon15_0 b/result/schematron/zvon15_0
new file mode 100644
index 0000000..56500fe
--- /dev/null
+++ b/result/schematron/zvon15_0
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<AAA name="aaa">
+<BBB id="bbb"/>
+<CCC color="ccc"/>
+</AAA>
diff --git a/result/schematron/zvon15_0.err b/result/schematron/zvon15_0.err
new file mode 100644
index 0000000..5234889
--- /dev/null
+++ b/result/schematron/zvon15_0.err
@@ -0,0 +1,4 @@
+Pattern: id is the only permited attribute name
+/AAA line 1: Attribute name is forbidden in element AAA
+/AAA/CCC line 3: Attribute color is forbidden in element CCC
+./test/schematron/zvon15_0.xml fails to validate
diff --git a/result/schematron/zvon16_0 b/result/schematron/zvon16_0
new file mode 100644
index 0000000..709ce41
--- /dev/null
+++ b/result/schematron/zvon16_0
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE ideg [
+<!ELEMENT ideg (dog , cat , catowner+)>
+<!ELEMENT dog (#PCDATA)>
+<!ELEMENT cat (#PCDATA)>
+<!ELEMENT catowner (#PCDATA)>
+<!ATTLIST dog id ID #REQUIRED>
+<!ATTLIST cat id ID #REQUIRED>
+<!ATTLIST catowner pet IDREF #REQUIRED>
+]>
+<ideg>
+ <dog id="danny">Danny</dog>
+ <cat id="bede">Bede</cat>
+ <catowner>Harold</catowner>
+ <catowner pet="poochi">Fumiaki</catowner>
+ <catowner pet="danny">Jimmy</catowner>
+ <catowner pet="bede">Rick</catowner>
+</ideg>
diff --git a/result/schematron/zvon16_0.err b/result/schematron/zvon16_0.err
new file mode 100644
index 0000000..1759ec6
--- /dev/null
+++ b/result/schematron/zvon16_0.err
@@ -0,0 +1,3 @@
+./test/schematron/zvon16.sct:17: element rule: Schemas parser error : Failed to compile context expression catowner[@pet]
+./test/schematron/zvon16.sct:24: element rule: Schemas parser error : Failed to compile context expression catowner[@pet]
+Schematron schema ./test/schematron/zvon16.sct failed to compile
diff --git a/result/schematron/zvon1_0 b/result/schematron/zvon1_0
new file mode 100644
index 0000000..9aae4b1
--- /dev/null
+++ b/result/schematron/zvon1_0
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB/>
+</AAA>
diff --git a/result/schematron/zvon1_0.err b/result/schematron/zvon1_0.err
new file mode 100644
index 0000000..0d42184
--- /dev/null
+++ b/result/schematron/zvon1_0.err
@@ -0,0 +1,8 @@
+Pattern: Print both cases
+/AAA line 1: BBB element is present.
+/AAA line 1: AAA misses attribute name.
+Pattern: Print positive result only
+/AAA line 1: BBB element is present.
+Pattern: Print negative result only
+/AAA line 1: AAA misses attribute name.
+./test/schematron/zvon1_0.xml fails to validate
diff --git a/result/schematron/zvon1_1 b/result/schematron/zvon1_1
new file mode 100644
index 0000000..0a06953
--- /dev/null
+++ b/result/schematron/zvon1_1
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+ <CCC/>
+</AAA>
diff --git a/result/schematron/zvon1_1.err b/result/schematron/zvon1_1.err
new file mode 100644
index 0000000..70ee87a
--- /dev/null
+++ b/result/schematron/zvon1_1.err
@@ -0,0 +1,8 @@
+Pattern: Print both cases
+/AAA line 1: BBB element is missing.
+/AAA line 1: AAA misses attribute name.
+Pattern: Print positive result only
+Pattern: Print negative result only
+/AAA line 1: BBB element is missing.
+/AAA line 1: AAA misses attribute name.
+./test/schematron/zvon1_1.xml fails to validate
diff --git a/result/schematron/zvon2_0 b/result/schematron/zvon2_0
new file mode 100644
index 0000000..695bc8f
--- /dev/null
+++ b/result/schematron/zvon2_0
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB>bbbb</BBB>
+ <CCC>cccc</CCC>
+</AAA>
diff --git a/result/schematron/zvon2_0.err b/result/schematron/zvon2_0.err
new file mode 100644
index 0000000..f4e4a7f
--- /dev/null
+++ b/result/schematron/zvon2_0.err
@@ -0,0 +1,2 @@
+Pattern: Character @ forbidden
+./test/schematron/zvon2_0.xml validates
diff --git a/result/schematron/zvon2_1 b/result/schematron/zvon2_1
new file mode 100644
index 0000000..2af2cd0
--- /dev/null
+++ b/result/schematron/zvon2_1
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB>bbbb@bbb.com</BBB>
+ <CCC>ccc@ccc.com</CCC>
+</AAA>
diff --git a/result/schematron/zvon2_1.err b/result/schematron/zvon2_1.err
new file mode 100644
index 0000000..28f3e99
--- /dev/null
+++ b/result/schematron/zvon2_1.err
@@ -0,0 +1,5 @@
+Pattern: Character @ forbidden
+/AAA line 1: Text in element AAA must not contain character @
+/AAA/BBB line 2: Text in element BBB must not contain character @
+/AAA/CCC line 3: Text in element CCC must not contain character @
+./test/schematron/zvon2_1.xml fails to validate
diff --git a/result/schematron/zvon2_2 b/result/schematron/zvon2_2
new file mode 100644
index 0000000..585cf0c
--- /dev/null
+++ b/result/schematron/zvon2_2
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB>bbbb</BBB>
+ <CCC>cccc</CCC>
+ aaa@aaa.net
+</AAA>
diff --git a/result/schematron/zvon2_2.err b/result/schematron/zvon2_2.err
new file mode 100644
index 0000000..40dc7ca
--- /dev/null
+++ b/result/schematron/zvon2_2.err
@@ -0,0 +1,3 @@
+Pattern: Character @ forbidden
+/AAA line 1: Text in element AAA must not contain character @
+./test/schematron/zvon2_2.xml fails to validate
diff --git a/result/schematron/zvon3_0 b/result/schematron/zvon3_0
new file mode 100644
index 0000000..a8a6ed7
--- /dev/null
+++ b/result/schematron/zvon3_0
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB>
+ <CCC/>
+ <CCC/>
+ </BBB>
+ <CCC name="c1"/>
+ <CCC name="c2"/>
+</AAA>
diff --git a/result/schematron/zvon3_0.err b/result/schematron/zvon3_0.err
new file mode 100644
index 0000000..419e729
--- /dev/null
+++ b/result/schematron/zvon3_0.err
@@ -0,0 +1,6 @@
+Pattern: Attribute test
+/AAA/BBB/CCC[1] line 3: attribute name is not present
+/AAA/BBB/CCC[2] line 4: attribute name is not present
+/AAA/CCC[1] line 6: attribute name is present
+/AAA/CCC[2] line 7: attribute name is present
+./test/schematron/zvon3_0.xml fails to validate
diff --git a/result/schematron/zvon4_0 b/result/schematron/zvon4_0
new file mode 100644
index 0000000..b1e694e
--- /dev/null
+++ b/result/schematron/zvon4_0
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB>
+ <CCC/>
+ <CCC/>
+ </BBB>
+</AAA>
diff --git a/result/schematron/zvon4_0.err b/result/schematron/zvon4_0.err
new file mode 100644
index 0000000..6aa6b2b
--- /dev/null
+++ b/result/schematron/zvon4_0.err
@@ -0,0 +1,3 @@
+Pattern: Root test
+/AAA line 1: Root element is AAA
+./test/schematron/zvon4_0.xml fails to validate
diff --git a/result/schematron/zvon4_1 b/result/schematron/zvon4_1
new file mode 100644
index 0000000..6b1facc
--- /dev/null
+++ b/result/schematron/zvon4_1
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<XXX>
+ <BBB>
+ <CCC/>
+ <CCC/>
+ </BBB>
+</XXX>
diff --git a/result/schematron/zvon4_1.err b/result/schematron/zvon4_1.err
new file mode 100644
index 0000000..4ad324f
--- /dev/null
+++ b/result/schematron/zvon4_1.err
@@ -0,0 +1,3 @@
+Pattern: Root test
+/XXX line 1: Root element is XXX, not AAA
+./test/schematron/zvon4_1.xml fails to validate
diff --git a/result/schematron/zvon5_0 b/result/schematron/zvon5_0
new file mode 100644
index 0000000..d763505
--- /dev/null
+++ b/result/schematron/zvon5_0
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB>
+ <CCC/>
+ </BBB>
+</AAA>
diff --git a/result/schematron/zvon5_0.err b/result/schematron/zvon5_0.err
new file mode 100644
index 0000000..91ef5f2
--- /dev/null
+++ b/result/schematron/zvon5_0.err
@@ -0,0 +1,7 @@
+Pattern: Select empty elements CCC
+/AAA/BBB/CCC line 3: Source contains an empty element CCC
+/AAA/BBB/CCC line 3: [1]An element CCC does not contain any text
+/AAA/BBB/CCC line 3: [2]An element CCC does not contain any text
+/AAA/BBB/CCC line 3: [1]An element CCC does not contain any child element
+/AAA/BBB/CCC line 3: [2]An element CCC does not contain any child element
+./test/schematron/zvon5_0.xml fails to validate
diff --git a/result/schematron/zvon5_1 b/result/schematron/zvon5_1
new file mode 100644
index 0000000..c76b756
--- /dev/null
+++ b/result/schematron/zvon5_1
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB>
+ <CCC>I am CCC element</CCC>
+ </BBB>
+</AAA>
diff --git a/result/schematron/zvon5_1.err b/result/schematron/zvon5_1.err
new file mode 100644
index 0000000..f4ce6d4
--- /dev/null
+++ b/result/schematron/zvon5_1.err
@@ -0,0 +1,5 @@
+Pattern: Select empty elements CCC
+/AAA/BBB/CCC line 3: Source contains an empty element CCC
+/AAA/BBB/CCC line 3: [1]An element CCC does not contain any child element
+/AAA/BBB/CCC line 3: [2]An element CCC does not contain any child element
+./test/schematron/zvon5_1.xml fails to validate
diff --git a/result/schematron/zvon5_2 b/result/schematron/zvon5_2
new file mode 100644
index 0000000..ddc11fe
--- /dev/null
+++ b/result/schematron/zvon5_2
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<AAA>
+ <BBB>
+ <CCC>
+ <DDD/>
+ </CCC>
+ </BBB>
+</AAA>
diff --git a/result/schematron/zvon5_2.err b/result/schematron/zvon5_2.err
new file mode 100644
index 0000000..8c69e79
--- /dev/null
+++ b/result/schematron/zvon5_2.err
@@ -0,0 +1,5 @@
+Pattern: Select empty elements CCC
+/AAA/BBB/CCC line 3: Source contains an empty element CCC
+/AAA/BBB/CCC line 3: [1]An element CCC does not contain any text
+/AAA/BBB/CCC line 3: [2]An element CCC does not contain any text
+./test/schematron/zvon5_2.xml fails to validate
diff --git a/result/schematron/zvon6_0 b/result/schematron/zvon6_0
new file mode 100644
index 0000000..6539765
--- /dev/null
+++ b/result/schematron/zvon6_0
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+aaa
+</AAA>
diff --git a/result/schematron/zvon6_0.err b/result/schematron/zvon6_0.err
new file mode 100644
index 0000000..5cc3b37
--- /dev/null
+++ b/result/schematron/zvon6_0.err
@@ -0,0 +1,3 @@
+Pattern: Predefined values
+/AAA line 1: O.K.
+./test/schematron/zvon6_0.xml fails to validate
diff --git a/result/schematron/zvon6_1 b/result/schematron/zvon6_1
new file mode 100644
index 0000000..e0c2e73
--- /dev/null
+++ b/result/schematron/zvon6_1
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+ bbb
+</AAA>
diff --git a/result/schematron/zvon6_1.err b/result/schematron/zvon6_1.err
new file mode 100644
index 0000000..8b728d4
--- /dev/null
+++ b/result/schematron/zvon6_1.err
@@ -0,0 +1,3 @@
+Pattern: Predefined values
+/AAA line 1: O.K.
+./test/schematron/zvon6_1.xml fails to validate
diff --git a/result/schematron/zvon6_2 b/result/schematron/zvon6_2
new file mode 100644
index 0000000..edc24a9
--- /dev/null
+++ b/result/schematron/zvon6_2
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+ ccc
+</AAA>
diff --git a/result/schematron/zvon6_2.err b/result/schematron/zvon6_2.err
new file mode 100644
index 0000000..1868934
--- /dev/null
+++ b/result/schematron/zvon6_2.err
@@ -0,0 +1,3 @@
+Pattern: Predefined values
+/AAA line 1: The AAA value is not permitted.
+./test/schematron/zvon6_2.xml fails to validate
diff --git a/result/schematron/zvon7_0 b/result/schematron/zvon7_0
new file mode 100644
index 0000000..6539765
--- /dev/null
+++ b/result/schematron/zvon7_0
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+aaa
+</AAA>
diff --git a/result/schematron/zvon7_0.err b/result/schematron/zvon7_0.err
new file mode 100644
index 0000000..df427d6
--- /dev/null
+++ b/result/schematron/zvon7_0.err
@@ -0,0 +1,3 @@
+Pattern: Test integer
+/AAA line 1: The AAA value is not an integer.
+./test/schematron/zvon7_0.xml fails to validate
diff --git a/result/schematron/zvon7_1 b/result/schematron/zvon7_1
new file mode 100644
index 0000000..0a4007a
--- /dev/null
+++ b/result/schematron/zvon7_1
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+ 12.234
+</AAA>
diff --git a/result/schematron/zvon7_1.err b/result/schematron/zvon7_1.err
new file mode 100644
index 0000000..aa1e0a1
--- /dev/null
+++ b/result/schematron/zvon7_1.err
@@ -0,0 +1,3 @@
+Pattern: Test integer
+/AAA line 1: The AAA value is not an integer.
+./test/schematron/zvon7_1.xml fails to validate
diff --git a/result/schematron/zvon7_2 b/result/schematron/zvon7_2
new file mode 100644
index 0000000..8eb45e3
--- /dev/null
+++ b/result/schematron/zvon7_2
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+45
+</AAA>
diff --git a/result/schematron/zvon7_2.err b/result/schematron/zvon7_2.err
new file mode 100644
index 0000000..abf8cc7
--- /dev/null
+++ b/result/schematron/zvon7_2.err
@@ -0,0 +1,3 @@
+Pattern: Test integer
+/AAA line 1: O.K.
+./test/schematron/zvon7_2.xml fails to validate
diff --git a/result/schematron/zvon7_3 b/result/schematron/zvon7_3
new file mode 100644
index 0000000..35089dd
--- /dev/null
+++ b/result/schematron/zvon7_3
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+0
+</AAA>
diff --git a/result/schematron/zvon7_3.err b/result/schematron/zvon7_3.err
new file mode 100644
index 0000000..5b4b59f
--- /dev/null
+++ b/result/schematron/zvon7_3.err
@@ -0,0 +1,3 @@
+Pattern: Test integer
+/AAA line 1: O.K.
+./test/schematron/zvon7_3.xml fails to validate
diff --git a/result/schematron/zvon7_4 b/result/schematron/zvon7_4
new file mode 100644
index 0000000..0739eb4
--- /dev/null
+++ b/result/schematron/zvon7_4
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<AAA>
+-45
+</AAA>
diff --git a/result/schematron/zvon7_4.err b/result/schematron/zvon7_4.err
new file mode 100644
index 0000000..de1ee89
--- /dev/null
+++ b/result/schematron/zvon7_4.err
@@ -0,0 +1,3 @@
+Pattern: Test integer
+/AAA line 1: O.K.
+./test/schematron/zvon7_4.xml fails to validate
diff --git a/result/schematron/zvon8_0 b/result/schematron/zvon8_0
new file mode 100644
index 0000000..1932cd0
--- /dev/null
+++ b/result/schematron/zvon8_0
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<XXX>
+ <BBB/>
+ <BBB/>
+ <AAA/>
+ <BBB/>
+ <AAA/>
+ <AAA/>
+</XXX>
diff --git a/result/schematron/zvon8_0.err b/result/schematron/zvon8_0.err
new file mode 100644
index 0000000..085e1de
--- /dev/null
+++ b/result/schematron/zvon8_0.err
@@ -0,0 +1,3 @@
+Pattern: Test count
+/XXX line 1: O.K.
+./test/schematron/zvon8_0.xml fails to validate
diff --git a/result/schematron/zvon8_1 b/result/schematron/zvon8_1
new file mode 100644
index 0000000..93e5cfd
--- /dev/null
+++ b/result/schematron/zvon8_1
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<XXX>
+ <BBB/>
+ <AAA/>
+ <BBB/>
+ <AAA/>
+ <AAA/>
+</XXX>
diff --git a/result/schematron/zvon8_1.err b/result/schematron/zvon8_1.err
new file mode 100644
index 0000000..ae07d05
--- /dev/null
+++ b/result/schematron/zvon8_1.err
@@ -0,0 +1,3 @@
+Pattern: Test count
+/XXX line 1: Some BBB are missing
+./test/schematron/zvon8_1.xml fails to validate
diff --git a/result/schematron/zvon8_2 b/result/schematron/zvon8_2
new file mode 100644
index 0000000..4eea77b
--- /dev/null
+++ b/result/schematron/zvon8_2
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<XXX>
+ <BBB/>
+ <BBB/>
+ <AAA/>
+ <BBB/>
+ <AAA/>
+</XXX>
diff --git a/result/schematron/zvon8_2.err b/result/schematron/zvon8_2.err
new file mode 100644
index 0000000..37e8432
--- /dev/null
+++ b/result/schematron/zvon8_2.err
@@ -0,0 +1,3 @@
+Pattern: Test count
+/XXX line 1: Some AAA are missing
+./test/schematron/zvon8_2.xml fails to validate
diff --git a/result/schematron/zvon9_0 b/result/schematron/zvon9_0
new file mode 100644
index 0000000..1f254ec
--- /dev/null
+++ b/result/schematron/zvon9_0
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<AAA>
+ <CCC/>
+ <CCC/>
+ <BBB>
+ <CCC id="Q1"/>
+ </BBB>
+</AAA>
diff --git a/result/schematron/zvon9_0.err b/result/schematron/zvon9_0.err
new file mode 100644
index 0000000..a39ceeb
--- /dev/null
+++ b/result/schematron/zvon9_0.err
@@ -0,0 +1,2 @@
+Pattern: Test attribute
+./test/schematron/zvon9_0.xml validates
diff --git a/result/schematron/zvon9_1 b/result/schematron/zvon9_1
new file mode 100644
index 0000000..0dc0df7
--- /dev/null
+++ b/result/schematron/zvon9_1
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<AAA>
+ <CCC id="Q2"/>
+ <CCC/>
+ <BBB>
+ <CCC id="Q1"/>
+ </BBB>
+</AAA>
diff --git a/result/schematron/zvon9_1.err b/result/schematron/zvon9_1.err
new file mode 100644
index 0000000..44c6f67
--- /dev/null
+++ b/result/schematron/zvon9_1.err
@@ -0,0 +1,3 @@
+Pattern: Test attribute
+/AAA/CCC[1] line 2: Attribute id is used in wrong context
+./test/schematron/zvon9_1.xml fails to validate
diff --git a/result/schematron/zvon9_2 b/result/schematron/zvon9_2
new file mode 100644
index 0000000..b9218fc
--- /dev/null
+++ b/result/schematron/zvon9_2
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<AAA>
+ <CCC/>
+ <CCC/>
+ <BBB>
+ <CCC/>
+ </BBB>
+</AAA>
diff --git a/result/schematron/zvon9_2.err b/result/schematron/zvon9_2.err
new file mode 100644
index 0000000..20b0884
--- /dev/null
+++ b/result/schematron/zvon9_2.err
@@ -0,0 +1,3 @@
+Pattern: Test attribute
+/AAA/BBB/CCC line 5: Attribute id is missing
+./test/schematron/zvon9_2.xml fails to validate
diff --git a/result/valid/objednavka.xml b/result/valid/objednavka.xml
new file mode 100644
index 0000000..b0ffd92
--- /dev/null
+++ b/result/valid/objednavka.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE objednavka SYSTEM "dtds/objednavka.dtd">
+<objednavka>
+ <AdDoruÄŤeni>
+ <Jméno>Jan Novák</Jméno>
+ <Ulice>Bělehradská 147</Ulice>
+ <Město>Praha 2</Město>
+ <PSÄŚ>12000</PSÄŚ>
+ </AdDoruÄŤeni>
+ <AdÚčtovací>
+ <Jméno>Petra Nováková</Jméno>
+ <Ulice>Anglická 15</Ulice>
+ <Město>Praha 2</Město>
+ <PSÄŚ>12000</PSÄŚ>
+ </AdÚčtovací>
+ <ZpĹŻsobDopravy>DPD</ZpĹŻsobDopravy>
+ <ZpĹŻsobPlatby>dobĂ­rka</ZpĹŻsobPlatby>
+ <DatumPřijetí>2004-11-14</DatumPřijetí>
+ <DatumDoruÄŤenĂ­>2004-11-19</DatumDoruÄŤenĂ­>
+ <ObsahObjednávky>
+ <Zboží>
+ <KĂłd>2N7-516</KĂłd>
+ <Název>Sekačka na trávu</Název>
+ <PoÄŤet jednotka="ks">1</PoÄŤet>
+ <Cena>2999</Cena>
+ <Popis>http://example.org/sekacka.html</Popis>
+ </Zboží>
+ <Zboží>
+ <KĂłd>Q3Y-116</KĂłd>
+ <Název>Travní semeno</Název>
+ <PoÄŤet jednotka="kg">2.5</PoÄŤet>
+ <Cena>127.50</Cena>
+ </Zboží>
+ </ObsahObjednávky>
+ <Komentář>
+ <Ĺádka>O dodávku mám zájem pouze v případÄ›, Ĺľe se jedná o trávu v odrĹŻdÄ› konopĂ­.</Ĺádka>
+ <Ĺádka>Dále jsem se chtÄ›l zeptat, zda je doprava zdarma.</Ĺádka>
+ </Komentář>
+</objednavka>
diff --git a/result/valid/objednavka.xml.err b/result/valid/objednavka.xml.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/valid/objednavka.xml.err
diff --git a/result/xml2.sax b/result/xml2.sax
index e848473..141accd 100644
--- a/result/xml2.sax
+++ b/result/xml2.sax
@@ -12,6 +12,7 @@ SAX.error: PEReference: %xx; not found
SAX.characters(This sample shows a , 20)
SAX.getEntity(tricky)
SAX.error: Entity 'tricky' not defined
+SAX.reference(tricky)
SAX.characters( method., 8)
SAX.endDocument()
xmlSAXUserParseFile returned error 27
diff --git a/result/xml2.sax2 b/result/xml2.sax2
index e848473..141accd 100644
--- a/result/xml2.sax2
+++ b/result/xml2.sax2
@@ -12,6 +12,7 @@ SAX.error: PEReference: %xx; not found
SAX.characters(This sample shows a , 20)
SAX.getEntity(tricky)
SAX.error: Entity 'tricky' not defined
+SAX.reference(tricky)
SAX.characters( method., 8)
SAX.endDocument()
xmlSAXUserParseFile returned error 27
diff --git a/runsuite.c b/runsuite.c
index b788313..aecd6ae 100644
--- a/runsuite.c
+++ b/runsuite.c
@@ -30,8 +30,8 @@
#include <libxml/xmlschemastypes.h>
#define LOGFILE "runsuite.log"
-FILE *logfile = NULL;
-int verbose = 0;
+static FILE *logfile = NULL;
+static int verbose = 0;
#if defined(_WIN32) && !defined(__CYGWIN__)
#define vsnprintf _vsnprintf
@@ -96,9 +96,9 @@ fatalError(void) {
* that's needed to implement <resource>
*/
#define MAX_ENTITIES 20
-char *testEntitiesName[MAX_ENTITIES];
-char *testEntitiesValue[MAX_ENTITIES];
-int nb_entities = 0;
+static char *testEntitiesName[MAX_ENTITIES];
+static char *testEntitiesValue[MAX_ENTITIES];
+static int nb_entities = 0;
static void resetEntities(void) {
int i;
@@ -205,7 +205,7 @@ testErrorHandler(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
testErrors[testErrorsSize] = 0;
}
-xmlXPathContextPtr ctxtXPath;
+static xmlXPathContextPtr ctxtXPath;
static void
initializeLibxml2(void) {
diff --git a/runtest.c b/runtest.c
index 1923dc1..897cb9b 100644
--- a/runtest.c
+++ b/runtest.c
@@ -241,7 +241,7 @@ testExternalEntityLoader(const char *URL, const char *ID,
static char testErrors[32769];
static int testErrorsSize = 0;
-static void
+static void XMLCDECL
testErrorHandler(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
va_list args;
int res;
@@ -263,7 +263,7 @@ testErrorHandler(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
testErrors[testErrorsSize] = 0;
}
-static void
+static void XMLCDECL
channel(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
va_list args;
int res;
@@ -714,12 +714,12 @@ static int unloadMem(const char *mem) {
* *
************************************************************************/
-FILE *SAXdebug = NULL;
+static FILE *SAXdebug = NULL;
/*
* empty SAX block
*/
-xmlSAXHandler emptySAXHandlerStruct = {
+static xmlSAXHandler emptySAXHandlerStruct = {
NULL, /* internalSubset */
NULL, /* isStandalone */
NULL, /* hasInternalSubset */
@@ -755,8 +755,8 @@ xmlSAXHandler emptySAXHandlerStruct = {
};
static xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
-int callbacks = 0;
-int quiet = 0;
+static int callbacks = 0;
+static int quiet = 0;
/**
* isStandaloneDebug:
@@ -1287,7 +1287,7 @@ commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
* Display and format a warning messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
{
va_list args;
@@ -1310,7 +1310,7 @@ warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
* Display and format a error messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
{
va_list args;
@@ -1333,7 +1333,7 @@ errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
* Display and format a fatalError messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
{
va_list args;
@@ -1347,7 +1347,7 @@ fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
va_end(args);
}
-xmlSAXHandler debugSAXHandlerStruct = {
+static xmlSAXHandler debugSAXHandlerStruct = {
internalSubsetDebug,
isStandaloneDebug,
hasInternalSubsetDebug,
@@ -1382,7 +1382,7 @@ xmlSAXHandler debugSAXHandlerStruct = {
NULL
};
-xmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct;
+static xmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct;
/*
* SAX2 specific callbacks
@@ -1471,7 +1471,7 @@ endElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
fprintf(SAXdebug, ", '%s')\n", (char *) URI);
}
-xmlSAXHandler debugSAX2HandlerStruct = {
+static xmlSAXHandler debugSAX2HandlerStruct = {
internalSubsetDebug,
isStandaloneDebug,
hasInternalSubsetDebug,
@@ -1506,7 +1506,7 @@ xmlSAXHandler debugSAX2HandlerStruct = {
NULL
};
-xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct;
+static xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct;
#ifdef LIBXML_HTML_ENABLED
/**
@@ -1586,7 +1586,7 @@ htmlcdataDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
fprintf(SAXdebug, "SAX.cdata(%s, %d)\n", output, len);
}
-xmlSAXHandler debugHTMLSAXHandlerStruct = {
+static xmlSAXHandler debugHTMLSAXHandlerStruct = {
internalSubsetDebug,
isStandaloneDebug,
hasInternalSubsetDebug,
@@ -1621,7 +1621,7 @@ xmlSAXHandler debugHTMLSAXHandlerStruct = {
NULL
};
-xmlSAXHandlerPtr debugHTMLSAXHandler = &debugHTMLSAXHandlerStruct;
+static xmlSAXHandlerPtr debugHTMLSAXHandler = &debugHTMLSAXHandlerStruct;
#endif /* LIBXML_HTML_ENABLED */
#ifdef LIBXML_SAX1_ENABLED
@@ -2247,8 +2247,8 @@ streamMemParseTest(const char *filename, const char *result, const char *err,
* *
************************************************************************/
-FILE *xpathOutput;
-xmlDocPtr xpathDocument;
+static FILE *xpathOutput;
+static xmlDocPtr xpathDocument;
static void
testXPath(const char *str, int xptr, int expr) {
@@ -2692,6 +2692,178 @@ uriBaseTest(const char *filename,
"http://foo.com/path/to/index.html?orig#help"));
}
+static int urip_success = 1;
+static int urip_current = 0;
+static const char *urip_testURLs[] = {
+ "urip://example.com/a b.html",
+ "urip://example.com/a%20b.html",
+ "file:///path/to/a b.html",
+ "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/test?a=1&b=2%263&c=4#foo",
+ NULL
+};
+static const char *urip_rcvsURLs[] = {
+ /* it is an URI the strings must be escaped */
+ "urip://example.com/a%20b.html",
+ /* check that % escaping is not broken */
+ "urip://example.com/a%20b.html",
+ /* it's an URI path the strings must be escaped */
+ "file:///path/to/a%20b.html",
+ /* check that % escaping is not broken */
+ "file:///path/to/a%20b.html",
+ /* this is not an URI, this is a path, so this should not be escaped */
+ "/path/to/a b.html",
+ /* check that paths with % are not broken */
+ "/path/to/a%20b.html",
+ /* out of context the encoding can't be guessed byte by byte conversion */
+ "urip://example.com/r%E9sum%E9.html",
+ /* verify we don't destroy URIs especially the query part */
+ "urip://example.com/test?a=1&b=2%263&c=4#foo",
+ NULL
+};
+static const char *urip_res = "<list/>";
+static const char *urip_cur = NULL;
+static int urip_rlen;
+
+/**
+ * uripMatch:
+ * @URI: an URI to test
+ *
+ * Check for an urip: query
+ *
+ * Returns 1 if yes and 0 if another Input module should be used
+ */
+static int
+uripMatch(const char * URI) {
+ if ((URI == NULL) || (!strcmp(URI, "file:///etc/xml/catalog")))
+ return(0);
+ /* Verify we received the escaped URL */
+ if (strcmp(urip_rcvsURLs[urip_current], URI))
+ urip_success = 0;
+ return(1);
+}
+
+/**
+ * uripOpen:
+ * @URI: an URI to test
+ *
+ * Return a pointer to the urip: query handler, in this example simply
+ * the urip_current pointer...
+ *
+ * Returns an Input context or NULL in case or error
+ */
+static void *
+uripOpen(const char * URI) {
+ if ((URI == NULL) || (!strcmp(URI, "file:///etc/xml/catalog")))
+ return(NULL);
+ /* Verify we received the escaped URL */
+ if (strcmp(urip_rcvsURLs[urip_current], URI))
+ urip_success = 0;
+ urip_cur = urip_res;
+ urip_rlen = strlen(urip_res);
+ return((void *) urip_cur);
+}
+
+/**
+ * uripClose:
+ * @context: the read context
+ *
+ * Close the urip: query handler
+ *
+ * Returns 0 or -1 in case of error
+ */
+static int
+uripClose(void * context) {
+ if (context == NULL) return(-1);
+ urip_cur = NULL;
+ urip_rlen = 0;
+ return(0);
+}
+
+/**
+ * uripRead:
+ * @context: the read context
+ * @buffer: where to store data
+ * @len: number of bytes to read
+ *
+ * Implement an urip: query read.
+ *
+ * Returns the number of bytes read or -1 in case of error
+ */
+static int
+uripRead(void * context, char * buffer, int len) {
+ const char *ptr = (const char *) context;
+
+ if ((context == NULL) || (buffer == NULL) || (len < 0))
+ return(-1);
+
+ if (len > urip_rlen) len = urip_rlen;
+ memcpy(buffer, ptr, len);
+ urip_rlen -= len;
+ return(len);
+}
+
+static int
+urip_checkURL(const char *URL) {
+ xmlDocPtr doc;
+
+ doc = xmlReadFile(URL, NULL, 0);
+ if (doc == NULL)
+ return(-1);
+ xmlFreeDoc(doc);
+ return(1);
+}
+
+/**
+ * uriPathTest:
+ * @filename: ignored
+ * @result: ignored
+ * @err: ignored
+ *
+ * Run a set of tests to check how Path and URI are handled before
+ * being passed to the I/O layer
+ *
+ * Returns 0 in case of success, an error code otherwise
+ */
+static int
+uriPathTest(const char *filename ATTRIBUTE_UNUSED,
+ const char *result ATTRIBUTE_UNUSED,
+ const char *err ATTRIBUTE_UNUSED,
+ int options ATTRIBUTE_UNUSED) {
+ int parsed;
+ int failures = 0;
+
+ /*
+ * register the new I/O handlers
+ */
+ if (xmlRegisterInputCallbacks(uripMatch, uripOpen, uripRead, uripClose) < 0)
+ {
+ fprintf(stderr, "failed to register HTTP handler\n");
+ return(-1);
+ }
+
+ for (urip_current = 0;urip_testURLs[urip_current] != NULL;urip_current++) {
+ urip_success = 1;
+ parsed = urip_checkURL(urip_testURLs[urip_current]);
+ if (urip_success != 1) {
+ fprintf(stderr, "failed the URL passing test for %s",
+ urip_testURLs[urip_current]);
+ failures++;
+ } else if (parsed != 1) {
+ fprintf(stderr, "failed the parsing test for %s",
+ urip_testURLs[urip_current]);
+ failures++;
+ }
+ nb_tests++;
+ }
+
+ xmlPopInputCallbacks();
+ return(failures);
+}
+
#ifdef LIBXML_SCHEMAS_ENABLED
/************************************************************************
* *
@@ -3076,7 +3248,7 @@ rngStreamTest(const char *filename,
* hack is also done in the Makefile
*/
if ((!strcmp(prefix, "tutor10_1")) || (!strcmp(prefix, "tutor10_2")) ||
- (!strcmp(prefix, "tutor3_2")))
+ (!strcmp(prefix, "tutor3_2")) || (!strcmp(prefix, "307377")))
disable_err = 1;
snprintf(pattern, 499, "./test/relaxng/%s_?.xml", prefix);
@@ -3357,7 +3529,7 @@ load_xpath_expr (xmlDocPtr parent_doc, const char* filename) {
xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
xmlSubstituteEntitiesDefault(1);
- doc = xmlParseFile(filename);
+ doc = xmlReadFile(filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT);
if (doc == NULL) {
fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename);
return(NULL);
@@ -3509,7 +3681,7 @@ c14nRunTest(const char* xml_filename, int with_comments, int exclusive,
xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
xmlSubstituteEntitiesDefault(1);
- doc = xmlParseFile(xml_filename);
+ doc = xmlReadFile(xml_filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT);
if (doc == NULL) {
fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_filename);
return(-1);
@@ -3644,7 +3816,7 @@ c14nExcWithoutCommentTest(const char *filename,
return(c14nCommonTest(filename, 0, 1, "exc-without-comments"));
}
#endif
-#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED)
+#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED) && defined (LIBXML_SAX1_ENABLED)
/************************************************************************
* *
* Catalog and threads test *
@@ -3667,8 +3839,8 @@ static const char *testfiles[] = {
"test/threads/invalid.xml",
};
-const char *Okay = "OK";
-const char *Failed = "Failed";
+static const char *Okay = "OK";
+static const char *Failed = "Failed";
#ifndef xmlDoValidityCheckingDefaultValue
#error xmlDoValidityCheckingDefaultValue is not a macro
@@ -4039,6 +4211,9 @@ testDesc testDescriptions[] = {
{ "URI base composition tests" ,
uriBaseTest, "./test/URI/*.data", "result/URI/", "", NULL,
0 },
+ { "Path URI conversion tests" ,
+ uriPathTest, NULL, NULL, NULL, NULL,
+ 0 },
#ifdef LIBXML_SCHEMAS_ENABLED
{ "Schemas regression tests" ,
schemasTest, "./test/schemas/*_*.xsd", NULL, NULL, NULL,
@@ -4070,7 +4245,7 @@ testDesc testDescriptions[] = {
c14nExcWithoutCommentTest, "./test/c14n/exc-without-comments/*.xml", NULL, NULL, NULL,
0 },
#endif
-#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED)
+#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_SAX1_ENABLED)
{ "Catalog and Threads regression tests" ,
threadsTest, NULL, NULL, NULL, NULL,
0 },
@@ -4131,7 +4306,7 @@ launchTests(testDescPtr tst) {
testErrorsSize = 0;
testErrors[0] = 0;
res = tst->func(globbuf.gl_pathv[i], result, error,
- tst->options);
+ tst->options | XML_PARSE_COMPACT);
xmlResetLastError();
if (res != 0) {
fprintf(stderr, "File %s generated an error\n",
@@ -4169,33 +4344,59 @@ launchTests(testDescPtr tst) {
return(err);
}
+static int verbose = 0;
+static int tests_quiet = 0;
+
+static int
+runtest(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]);
+ 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);
+}
+
int
main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- int i = 0, res, ret = 0;
- int verbose = 0;
- int old_errors, old_tests, old_leaks;
+ int i, a, ret = 0;
+ int subset = 0;
initializeLibxml2();
- if ((argc >= 2) && (!strcmp(argv[1], "-v")))
- verbose = 1;
- for (i = 0; testDescriptions[i].func != NULL; i++) {
- old_errors = nb_errors;
- old_tests = nb_tests;
- old_leaks = nb_leaks;
- if (testDescriptions[i].desc != NULL)
- printf("## %s\n", testDescriptions[i].desc);
- res = launchTests(&testDescriptions[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);
+
+ for (a = 1; a < argc;a++) {
+ if (!strcmp(argv[a], "-v"))
+ verbose = 1;
+ else if (!strcmp(argv[a], "-quiet"))
+ tests_quiet = 1;
+ else {
+ for (i = 0; testDescriptions[i].func != NULL; i++) {
+ if (strstr(testDescriptions[i].desc, argv[a])) {
+ ret += runtest(i);
+ subset++;
+ }
+ }
+ }
+ }
+ if (subset == 0) {
+ for (i = 0; testDescriptions[i].func != NULL; i++) {
+ ret += runtest(i);
}
}
if ((nb_errors == 0) && (nb_leaks == 0)) {
diff --git a/schematron.c b/schematron.c
new file mode 100644
index 0000000..9cb5027
--- /dev/null
+++ b/schematron.c
@@ -0,0 +1,1729 @@
+/*
+ * schematron.c : implementation of the Schematron schema validity checking
+ *
+ * See Copyright for the status of this software.
+ *
+ * Daniel Veillard <daniel@veillard.com>
+ */
+
+/*
+ * TODO:
+ * + double check the semantic, especially
+ * - multiple rules applying in a single pattern/node
+ * - the semantic of libxml2 patterns vs. XSLT production referenced
+ * by the spec.
+ * + export of results in SVRL
+ * + full parsing and coverage of the spec, conformance of the input to the
+ * spec
+ * + divergences between the draft and the ISO proposed standard :-(
+ * + hook and test include
+ * + try and compare with the XSLT version
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#ifdef LIBXML_SCHEMATRON_ENABLED
+
+#include <string.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#include <libxml/uri.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
+#include <libxml/pattern.h>
+#include <libxml/schematron.h>
+
+#define SCHEMATRON_PARSE_OPTIONS XML_PARSE_NOENT
+
+#define SCT_OLD_NS BAD_CAST "http://www.ascc.net/xml/schematron"
+
+#define XML_SCHEMATRON_NS BAD_CAST "http://purl.oclc.org/dsdl/schematron"
+
+
+static const xmlChar *xmlSchematronNs = XML_SCHEMATRON_NS;
+static const xmlChar *xmlOldSchematronNs = SCT_OLD_NS;
+
+#define IS_SCHEMATRON(node, elem) \
+ ((node != NULL) && (node->type == XML_ELEMENT_NODE ) && \
+ (node->ns != NULL) && \
+ (xmlStrEqual(node->name, (const xmlChar *) elem)) && \
+ ((xmlStrEqual(node->ns->href, xmlSchematronNs)) || \
+ (xmlStrEqual(node->ns->href, xmlOldSchematronNs))))
+
+#define NEXT_SCHEMATRON(node) \
+ while (node != NULL) { \
+ if ((node->type == XML_ELEMENT_NODE ) && (node->ns != NULL) && \
+ ((xmlStrEqual(node->ns->href, xmlSchematronNs)) || \
+ (xmlStrEqual(node->ns->href, xmlOldSchematronNs)))) \
+ break; \
+ node = node->next; \
+ }
+
+/**
+ * TODO:
+ *
+ * macro to flag unimplemented blocks
+ */
+#define TODO \
+ xmlGenericError(xmlGenericErrorContext, \
+ "Unimplemented block at %s:%d\n", \
+ __FILE__, __LINE__);
+
+typedef enum {
+ XML_SCHEMATRON_ASSERT=1,
+ XML_SCHEMATRON_REPORT=2
+} xmlSchematronTestType;
+
+/**
+ * _xmlSchematronTest:
+ *
+ * A Schematrons test, either an assert or a report
+ */
+typedef struct _xmlSchematronTest xmlSchematronTest;
+typedef xmlSchematronTest *xmlSchematronTestPtr;
+struct _xmlSchematronTest {
+ xmlSchematronTestPtr next; /* the next test in the list */
+ xmlSchematronTestType type; /* the test type */
+ xmlNodePtr node; /* the node in the tree */
+ xmlChar *test; /* the expression to test */
+ xmlXPathCompExprPtr comp; /* the compiled expression */
+ xmlChar *report; /* the message to report */
+};
+
+/**
+ * _xmlSchematronRule:
+ *
+ * A Schematrons rule
+ */
+typedef struct _xmlSchematronRule xmlSchematronRule;
+typedef xmlSchematronRule *xmlSchematronRulePtr;
+struct _xmlSchematronRule {
+ xmlSchematronRulePtr next; /* the next rule in the list */
+ xmlSchematronRulePtr patnext;/* the next rule in the pattern list */
+ xmlNodePtr node; /* the node in the tree */
+ xmlChar *context; /* the context evaluation rule */
+ xmlSchematronTestPtr tests; /* the list of tests */
+ xmlPatternPtr pattern; /* the compiled pattern associated */
+ xmlChar *report; /* the message to report */
+};
+
+/**
+ * _xmlSchematronPattern:
+ *
+ * A Schematrons pattern
+ */
+typedef struct _xmlSchematronPattern xmlSchematronPattern;
+typedef xmlSchematronPattern *xmlSchematronPatternPtr;
+struct _xmlSchematronPattern {
+ xmlSchematronPatternPtr next;/* the next pattern in the list */
+ xmlSchematronRulePtr rules; /* the list of rules */
+ xmlChar *name; /* the name of the pattern */
+};
+
+/**
+ * _xmlSchematron:
+ *
+ * A Schematrons definition
+ */
+struct _xmlSchematron {
+ const xmlChar *name; /* schema name */
+ int preserve; /* was the document passed by the user */
+ xmlDocPtr doc; /* pointer to the parsed document */
+ int flags; /* specific to this schematron */
+
+ void *_private; /* unused by the library */
+ xmlDictPtr dict; /* the dictionnary used internally */
+
+ const xmlChar *title; /* the title if any */
+
+ int nbNs; /* the number of namespaces */
+
+ int nbPattern; /* the number of patterns */
+ xmlSchematronPatternPtr patterns;/* the patterns found */
+ xmlSchematronRulePtr rules; /* the rules gathered */
+ int nbNamespaces; /* number of namespaces in the array */
+ int maxNamespaces; /* size of the array */
+ const xmlChar **namespaces; /* the array of namespaces */
+};
+
+/**
+ * xmlSchematronValidCtxt:
+ *
+ * A Schematrons validation context
+ */
+struct _xmlSchematronValidCtxt {
+ int type;
+ int flags; /* an or of xmlSchematronValidOptions */
+
+ xmlDictPtr dict;
+ int nberrors;
+ int err;
+
+ xmlSchematronPtr schema;
+ xmlXPathContextPtr xctxt;
+
+ FILE *outputFile; /* if using XML_SCHEMATRON_OUT_FILE */
+ xmlBufferPtr outputBuffer; /* if using XML_SCHEMATRON_OUT_BUFFER */
+ xmlOutputWriteCallback iowrite; /* if using XML_SCHEMATRON_OUT_IO */
+ xmlOutputCloseCallback ioclose;
+ void *ioctx;
+};
+
+struct _xmlSchematronParserCtxt {
+ int type;
+ const xmlChar *URL;
+ xmlDocPtr doc;
+ int preserve; /* Whether the doc should be freed */
+ const char *buffer;
+ int size;
+
+ xmlDictPtr dict; /* dictionnary for interned string names */
+
+ int nberrors;
+ int err;
+ xmlXPathContextPtr xctxt; /* the XPath context used for compilation */
+ xmlSchematronPtr schema;
+
+ int nbNamespaces; /* number of namespaces in the array */
+ int maxNamespaces; /* size of the array */
+ const xmlChar **namespaces; /* the array of namespaces */
+
+ int nbIncludes; /* number of includes in the array */
+ int maxIncludes; /* size of the array */
+ xmlNodePtr *includes; /* the array of includes */
+
+ /* error rreporting data */
+ void *userData; /* user specific data block */
+ xmlSchematronValidityErrorFunc error;/* the callback in case of errors */
+ xmlSchematronValidityWarningFunc warning;/* callback in case of warning */
+ xmlStructuredErrorFunc serror; /* the structured function */
+
+};
+
+#define XML_STRON_CTXT_PARSER 1
+#define XML_STRON_CTXT_VALIDATOR 2
+
+/************************************************************************
+ * *
+ * Error reporting *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSchematronPErrMemory:
+ * @node: a context node
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlSchematronPErrMemory(xmlSchematronParserCtxtPtr ctxt,
+ const char *extra, xmlNodePtr node)
+{
+ if (ctxt != NULL)
+ ctxt->nberrors++;
+ __xmlSimpleError(XML_FROM_SCHEMASP, XML_ERR_NO_MEMORY, node, NULL,
+ extra);
+}
+
+/**
+ * xmlSchematronPErr:
+ * @ctxt: the parsing context
+ * @node: the context node
+ * @error: the error code
+ * @msg: the error message
+ * @str1: extra data
+ * @str2: extra data
+ *
+ * Handle a parser error
+ */
+static void
+xmlSchematronPErr(xmlSchematronParserCtxtPtr ctxt, xmlNodePtr node, int error,
+ const char *msg, const xmlChar * str1, const xmlChar * str2)
+{
+ xmlGenericErrorFunc channel = NULL;
+ xmlStructuredErrorFunc schannel = NULL;
+ void *data = NULL;
+
+ if (ctxt != NULL) {
+ ctxt->nberrors++;
+ channel = ctxt->error;
+ data = ctxt->userData;
+ schannel = ctxt->serror;
+ }
+ __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASP,
+ error, XML_ERR_ERROR, NULL, 0,
+ (const char *) str1, (const char *) str2, NULL, 0, 0,
+ msg, str1, str2);
+}
+
+/**
+ * xmlSchematronVTypeErrMemory:
+ * @node: a context node
+ * @extra: extra informations
+ *
+ * Handle an out of memory condition
+ */
+static void
+xmlSchematronVErrMemory(xmlSchematronValidCtxtPtr ctxt,
+ const char *extra, xmlNodePtr node)
+{
+ if (ctxt != NULL) {
+ ctxt->nberrors++;
+ ctxt->err = XML_SCHEMAV_INTERNAL;
+ }
+ __xmlSimpleError(XML_FROM_SCHEMASV, XML_ERR_NO_MEMORY, node, NULL,
+ extra);
+}
+
+/************************************************************************
+ * *
+ * Parsing and compilation of the Schematrontrons *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSchematronAddTest:
+ * @ctxt: the schema parsing context
+ * @type: the type of test
+ * @rule: the parent rule
+ * @node: the node hosting the test
+ * @test: the associated test
+ * @report: the associated report string
+ *
+ * Add a test to a schematron
+ *
+ * Returns the new pointer or NULL in case of error
+ */
+static xmlSchematronTestPtr
+xmlSchematronAddTest(xmlSchematronParserCtxtPtr ctxt,
+ xmlSchematronTestType type,
+ xmlSchematronRulePtr rule,
+ xmlNodePtr node, xmlChar *test, xmlChar *report)
+{
+ xmlSchematronTestPtr ret;
+ xmlXPathCompExprPtr comp;
+
+ if ((ctxt == NULL) || (rule == NULL) || (node == NULL) ||
+ (test == NULL))
+ return(NULL);
+
+ /*
+ * try first to compile the test expression
+ */
+ comp = xmlXPathCtxtCompile(ctxt->xctxt, test);
+ if (comp == NULL) {
+ xmlSchematronPErr(ctxt, node,
+ XML_SCHEMAP_NOROOT,
+ "Failed to compile test expression %s",
+ test, NULL);
+ return(NULL);
+ }
+
+ ret = (xmlSchematronTestPtr) xmlMalloc(sizeof(xmlSchematronTest));
+ if (ret == NULL) {
+ xmlSchematronPErrMemory(ctxt, "allocating schema test", node);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchematronTest));
+ ret->type = type;
+ ret->node = node;
+ ret->test = test;
+ ret->comp = comp;
+ ret->report = report;
+ ret->next = NULL;
+ if (rule->tests == NULL) {
+ rule->tests = ret;
+ } else {
+ xmlSchematronTestPtr prev = rule->tests;
+
+ while (prev->next != NULL)
+ prev = prev->next;
+ prev->next = ret;
+ }
+ return (ret);
+}
+
+/**
+ * xmlSchematronFreeTests:
+ * @tests: a list of tests
+ *
+ * Free a list of tests.
+ */
+static void
+xmlSchematronFreeTests(xmlSchematronTestPtr tests) {
+ xmlSchematronTestPtr next;
+
+ while (tests != NULL) {
+ next = tests->next;
+ if (tests->test != NULL)
+ xmlFree(tests->test);
+ if (tests->comp != NULL)
+ xmlXPathFreeCompExpr(tests->comp);
+ if (tests->report != NULL)
+ xmlFree(tests->report);
+ xmlFree(tests);
+ tests = next;
+ }
+}
+
+/**
+ * xmlSchematronAddRule:
+ * @ctxt: the schema parsing context
+ * @schema: a schema structure
+ * @node: the node hosting the rule
+ * @context: the associated context string
+ * @report: the associated report string
+ *
+ * Add a rule to a schematron
+ *
+ * Returns the new pointer or NULL in case of error
+ */
+static xmlSchematronRulePtr
+xmlSchematronAddRule(xmlSchematronParserCtxtPtr ctxt, xmlSchematronPtr schema,
+ xmlSchematronPatternPtr pat, xmlNodePtr node,
+ xmlChar *context, xmlChar *report)
+{
+ xmlSchematronRulePtr ret;
+ xmlPatternPtr pattern;
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL) ||
+ (context == NULL))
+ return(NULL);
+
+ /*
+ * Try first to compile the pattern
+ */
+ pattern = xmlPatterncompile(context, ctxt->dict, XML_PATTERN_XPATH,
+ ctxt->namespaces);
+ if (pattern == NULL) {
+ xmlSchematronPErr(ctxt, node,
+ XML_SCHEMAP_NOROOT,
+ "Failed to compile context expression %s",
+ context, NULL);
+ }
+
+ ret = (xmlSchematronRulePtr) xmlMalloc(sizeof(xmlSchematronRule));
+ if (ret == NULL) {
+ xmlSchematronPErrMemory(ctxt, "allocating schema rule", node);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchematronRule));
+ ret->node = node;
+ ret->context = context;
+ ret->pattern = pattern;
+ ret->report = report;
+ ret->next = NULL;
+ if (schema->rules == NULL) {
+ schema->rules = ret;
+ } else {
+ xmlSchematronRulePtr prev = schema->rules;
+
+ while (prev->next != NULL)
+ prev = prev->next;
+ prev->next = ret;
+ }
+ ret->patnext = NULL;
+ if (pat->rules == NULL) {
+ pat->rules = ret;
+ } else {
+ xmlSchematronRulePtr prev = pat->rules;
+
+ while (prev->patnext != NULL)
+ prev = prev->patnext;
+ prev->patnext = ret;
+ }
+ return (ret);
+}
+
+/**
+ * xmlSchematronFreeRules:
+ * @rules: a list of rules
+ *
+ * Free a list of rules.
+ */
+static void
+xmlSchematronFreeRules(xmlSchematronRulePtr rules) {
+ xmlSchematronRulePtr next;
+
+ while (rules != NULL) {
+ next = rules->next;
+ if (rules->tests)
+ xmlSchematronFreeTests(rules->tests);
+ if (rules->context != NULL)
+ xmlFree(rules->context);
+ if (rules->pattern)
+ xmlFreePattern(rules->pattern);
+ if (rules->report != NULL)
+ xmlFree(rules->report);
+ xmlFree(rules);
+ rules = next;
+ }
+}
+
+/**
+ * xmlSchematronAddPattern:
+ * @ctxt: the schema parsing context
+ * @schema: a schema structure
+ * @node: the node hosting the pattern
+ * @id: the id or name of the pattern
+ *
+ * Add a pattern to a schematron
+ *
+ * Returns the new pointer or NULL in case of error
+ */
+static xmlSchematronPatternPtr
+xmlSchematronAddPattern(xmlSchematronParserCtxtPtr ctxt,
+ xmlSchematronPtr schema, xmlNodePtr node, xmlChar *name)
+{
+ xmlSchematronPatternPtr ret;
+
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL) || (name == NULL))
+ return(NULL);
+
+ ret = (xmlSchematronPatternPtr) xmlMalloc(sizeof(xmlSchematronPattern));
+ if (ret == NULL) {
+ xmlSchematronPErrMemory(ctxt, "allocating schema pattern", node);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchematronPattern));
+ ret->name = name;
+ ret->next = NULL;
+ if (schema->patterns == NULL) {
+ schema->patterns = ret;
+ } else {
+ xmlSchematronPatternPtr prev = schema->patterns;
+
+ while (prev->next != NULL)
+ prev = prev->next;
+ prev->next = ret;
+ }
+ return (ret);
+}
+
+/**
+ * xmlSchematronFreePatterns:
+ * @patterns: a list of patterns
+ *
+ * Free a list of patterns.
+ */
+static void
+xmlSchematronFreePatterns(xmlSchematronPatternPtr patterns) {
+ xmlSchematronPatternPtr next;
+
+ while (patterns != NULL) {
+ next = patterns->next;
+ if (patterns->name != NULL)
+ xmlFree(patterns->name);
+ xmlFree(patterns);
+ patterns = next;
+ }
+}
+
+/**
+ * xmlSchematronNewSchematron:
+ * @ctxt: a schema validation context
+ *
+ * Allocate a new Schematron structure.
+ *
+ * Returns the newly allocated structure or NULL in case or error
+ */
+static xmlSchematronPtr
+xmlSchematronNewSchematron(xmlSchematronParserCtxtPtr ctxt)
+{
+ xmlSchematronPtr ret;
+
+ ret = (xmlSchematronPtr) xmlMalloc(sizeof(xmlSchematron));
+ if (ret == NULL) {
+ xmlSchematronPErrMemory(ctxt, "allocating schema", NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchematron));
+ ret->dict = ctxt->dict;
+ xmlDictReference(ret->dict);
+
+ return (ret);
+}
+
+/**
+ * xmlSchematronFree:
+ * @schema: a schema structure
+ *
+ * Deallocate a Schematron structure.
+ */
+void
+xmlSchematronFree(xmlSchematronPtr schema)
+{
+ if (schema == NULL)
+ return;
+
+ if ((schema->doc != NULL) && (!(schema->preserve)))
+ xmlFreeDoc(schema->doc);
+
+ if (schema->namespaces != NULL)
+ xmlFree(schema->namespaces);
+
+ xmlSchematronFreeRules(schema->rules);
+ xmlSchematronFreePatterns(schema->patterns);
+ xmlDictFree(schema->dict);
+ xmlFree(schema);
+}
+
+/**
+ * xmlSchematronNewParserCtxt:
+ * @URL: the location of the schema
+ *
+ * Create an XML Schematrons parse context for that file/resource expected
+ * to contain an XML Schematrons file.
+ *
+ * Returns the parser context or NULL in case of error
+ */
+xmlSchematronParserCtxtPtr
+xmlSchematronNewParserCtxt(const char *URL)
+{
+ xmlSchematronParserCtxtPtr ret;
+
+ if (URL == NULL)
+ return (NULL);
+
+ ret =
+ (xmlSchematronParserCtxtPtr)
+ xmlMalloc(sizeof(xmlSchematronParserCtxt));
+ if (ret == NULL) {
+ xmlSchematronPErrMemory(NULL, "allocating schema parser context",
+ NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchematronParserCtxt));
+ ret->type = XML_STRON_CTXT_PARSER;
+ ret->dict = xmlDictCreate();
+ ret->URL = xmlDictLookup(ret->dict, (const xmlChar *) URL, -1);
+ ret->includes = NULL;
+ ret->xctxt = xmlXPathNewContext(NULL);
+ if (ret->xctxt == NULL) {
+ xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context",
+ NULL);
+ xmlSchematronFreeParserCtxt(ret);
+ return (NULL);
+ }
+ ret->xctxt->flags = XML_XPATH_CHECKNS;
+ return (ret);
+}
+
+/**
+ * xmlSchematronNewMemParserCtxt:
+ * @buffer: a pointer to a char array containing the schemas
+ * @size: the size of the array
+ *
+ * Create an XML Schematrons parse context for that memory buffer expected
+ * to contain an XML Schematrons file.
+ *
+ * Returns the parser context or NULL in case of error
+ */
+xmlSchematronParserCtxtPtr
+xmlSchematronNewMemParserCtxt(const char *buffer, int size)
+{
+ xmlSchematronParserCtxtPtr ret;
+
+ if ((buffer == NULL) || (size <= 0))
+ return (NULL);
+
+ ret =
+ (xmlSchematronParserCtxtPtr)
+ xmlMalloc(sizeof(xmlSchematronParserCtxt));
+ if (ret == NULL) {
+ xmlSchematronPErrMemory(NULL, "allocating schema parser context",
+ NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchematronParserCtxt));
+ ret->buffer = buffer;
+ ret->size = size;
+ ret->dict = xmlDictCreate();
+ ret->xctxt = xmlXPathNewContext(NULL);
+ if (ret->xctxt == NULL) {
+ xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context",
+ NULL);
+ xmlSchematronFreeParserCtxt(ret);
+ return (NULL);
+ }
+ return (ret);
+}
+
+/**
+ * xmlSchematronNewDocParserCtxt:
+ * @doc: a preparsed document tree
+ *
+ * Create an XML Schematrons parse context for that document.
+ * NB. The document may be modified during the parsing process.
+ *
+ * Returns the parser context or NULL in case of error
+ */
+xmlSchematronParserCtxtPtr
+xmlSchematronNewDocParserCtxt(xmlDocPtr doc)
+{
+ xmlSchematronParserCtxtPtr ret;
+
+ if (doc == NULL)
+ return (NULL);
+
+ ret =
+ (xmlSchematronParserCtxtPtr)
+ xmlMalloc(sizeof(xmlSchematronParserCtxt));
+ if (ret == NULL) {
+ xmlSchematronPErrMemory(NULL, "allocating schema parser context",
+ NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchematronParserCtxt));
+ ret->doc = doc;
+ ret->dict = xmlDictCreate();
+ /* The application has responsibility for the document */
+ ret->preserve = 1;
+ ret->xctxt = xmlXPathNewContext(doc);
+ if (ret->xctxt == NULL) {
+ xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context",
+ NULL);
+ xmlSchematronFreeParserCtxt(ret);
+ return (NULL);
+ }
+
+ return (ret);
+}
+
+/**
+ * xmlSchematronFreeParserCtxt:
+ * @ctxt: the schema parser context
+ *
+ * Free the resources associated to the schema parser context
+ */
+void
+xmlSchematronFreeParserCtxt(xmlSchematronParserCtxtPtr ctxt)
+{
+ if (ctxt == NULL)
+ return;
+ if (ctxt->doc != NULL && !ctxt->preserve)
+ xmlFreeDoc(ctxt->doc);
+ if (ctxt->xctxt != NULL) {
+ xmlXPathFreeContext(ctxt->xctxt);
+ }
+ if (ctxt->namespaces != NULL)
+ xmlFree(ctxt->namespaces);
+ xmlDictFree(ctxt->dict);
+ xmlFree(ctxt);
+}
+
+/**
+ * xmlSchematronPushInclude:
+ * @ctxt: the schema parser context
+ * @doc: the included document
+ * @cur: the current include node
+ *
+ * Add an included document
+ */
+static void
+xmlSchematronPushInclude(xmlSchematronParserCtxtPtr ctxt,
+ xmlDocPtr doc, xmlNodePtr cur)
+{
+ if (ctxt->includes == NULL) {
+ ctxt->maxIncludes = 10;
+ ctxt->includes = (xmlNodePtr *)
+ xmlMalloc(ctxt->maxIncludes * 2 * sizeof(xmlNodePtr));
+ if (ctxt->includes == NULL) {
+ xmlSchematronPErrMemory(NULL, "allocating parser includes",
+ NULL);
+ return;
+ }
+ ctxt->nbIncludes = 0;
+ } else if (ctxt->nbIncludes + 2 >= ctxt->maxIncludes) {
+ xmlNodePtr *tmp;
+
+ tmp = (xmlNodePtr *)
+ xmlRealloc(ctxt->includes, ctxt->maxIncludes * 4 *
+ sizeof(xmlNodePtr));
+ if (tmp == NULL) {
+ xmlSchematronPErrMemory(NULL, "allocating parser includes",
+ NULL);
+ return;
+ }
+ ctxt->includes = tmp;
+ ctxt->maxIncludes *= 2;
+ }
+ ctxt->includes[2 * ctxt->nbIncludes] = cur;
+ ctxt->includes[2 * ctxt->nbIncludes + 1] = (xmlNodePtr) doc;
+ ctxt->nbIncludes++;
+}
+
+/**
+ * xmlSchematronPopInclude:
+ * @ctxt: the schema parser context
+ *
+ * Pop an include level. The included document is being freed
+ *
+ * Returns the node immediately following the include or NULL if the
+ * include list was empty.
+ */
+static xmlNodePtr
+xmlSchematronPopInclude(xmlSchematronParserCtxtPtr ctxt)
+{
+ xmlDocPtr doc;
+ xmlNodePtr ret;
+
+ if (ctxt->nbIncludes <= 0)
+ return(NULL);
+ ctxt->nbIncludes--;
+ doc = (xmlDocPtr) ctxt->includes[2 * ctxt->nbIncludes + 1];
+ ret = ctxt->includes[2 * ctxt->nbIncludes];
+ xmlFreeDoc(doc);
+ if (ret != NULL)
+ ret = ret->next;
+ if (ret == NULL)
+ return(xmlSchematronPopInclude(ctxt));
+ return(ret);
+}
+
+/**
+ * xmlSchematronAddNamespace:
+ * @ctxt: the schema parser context
+ * @prefix: the namespace prefix
+ * @ns: the namespace name
+ *
+ * Add a namespace definition in the context
+ */
+static void
+xmlSchematronAddNamespace(xmlSchematronParserCtxtPtr ctxt,
+ const xmlChar *prefix, const xmlChar *ns)
+{
+ if (ctxt->namespaces == NULL) {
+ ctxt->maxNamespaces = 10;
+ ctxt->namespaces = (const xmlChar **)
+ xmlMalloc(ctxt->maxNamespaces * 2 * sizeof(const xmlChar *));
+ if (ctxt->namespaces == NULL) {
+ xmlSchematronPErrMemory(NULL, "allocating parser namespaces",
+ NULL);
+ return;
+ }
+ ctxt->nbNamespaces = 0;
+ } else if (ctxt->nbNamespaces + 2 >= ctxt->maxNamespaces) {
+ const xmlChar **tmp;
+
+ tmp = (const xmlChar **)
+ xmlRealloc(ctxt->namespaces, ctxt->maxNamespaces * 4 *
+ sizeof(const xmlChar *));
+ if (tmp == NULL) {
+ xmlSchematronPErrMemory(NULL, "allocating parser namespaces",
+ NULL);
+ return;
+ }
+ ctxt->namespaces = tmp;
+ ctxt->maxNamespaces *= 2;
+ }
+ ctxt->namespaces[2 * ctxt->nbNamespaces] =
+ xmlDictLookup(ctxt->dict, ns, -1);
+ ctxt->namespaces[2 * ctxt->nbNamespaces + 1] =
+ xmlDictLookup(ctxt->dict, prefix, -1);
+ ctxt->nbNamespaces++;
+ ctxt->namespaces[2 * ctxt->nbNamespaces] = NULL;
+ ctxt->namespaces[2 * ctxt->nbNamespaces + 1] = NULL;
+
+}
+
+/**
+ * xmlSchematronParseRule:
+ * @ctxt: a schema validation context
+ * @rule: the rule node
+ *
+ * parse a rule element
+ */
+static void
+xmlSchematronParseRule(xmlSchematronParserCtxtPtr ctxt,
+ xmlSchematronPatternPtr pattern,
+ xmlNodePtr rule)
+{
+ xmlNodePtr cur;
+ int nbChecks = 0;
+ xmlChar *test;
+ xmlChar *context;
+ xmlChar *report;
+ xmlSchematronRulePtr ruleptr;
+ xmlSchematronTestPtr testptr;
+
+ if ((ctxt == NULL) || (rule == NULL)) return;
+
+ context = xmlGetNoNsProp(rule, BAD_CAST "context");
+ if (context == NULL) {
+ xmlSchematronPErr(ctxt, rule,
+ XML_SCHEMAP_NOROOT,
+ "rule has no context attribute",
+ NULL, NULL);
+ return;
+ } else if (context[0] == 0) {
+ xmlSchematronPErr(ctxt, rule,
+ XML_SCHEMAP_NOROOT,
+ "rule has an empty context attribute",
+ NULL, NULL);
+ xmlFree(context);
+ return;
+ } else {
+ ruleptr = xmlSchematronAddRule(ctxt, ctxt->schema, pattern,
+ rule, context, NULL);
+ if (ruleptr == NULL) {
+ xmlFree(context);
+ return;
+ }
+ }
+
+ cur = rule->children;
+ NEXT_SCHEMATRON(cur);
+ while (cur != NULL) {
+ if (IS_SCHEMATRON(cur, "assert")) {
+ nbChecks++;
+ test = xmlGetNoNsProp(cur, BAD_CAST "test");
+ if (test == NULL) {
+ xmlSchematronPErr(ctxt, cur,
+ XML_SCHEMAP_NOROOT,
+ "assert has no test attribute",
+ NULL, NULL);
+ } else if (test[0] == 0) {
+ xmlSchematronPErr(ctxt, cur,
+ XML_SCHEMAP_NOROOT,
+ "assert has an empty test attribute",
+ NULL, NULL);
+ xmlFree(test);
+ } else {
+ /* TODO will need dynamic processing instead */
+ report = xmlNodeGetContent(cur);
+
+ testptr = xmlSchematronAddTest(ctxt, XML_SCHEMATRON_ASSERT,
+ ruleptr, cur, test, report);
+ if (testptr == NULL)
+ xmlFree(test);
+ }
+ } else if (IS_SCHEMATRON(cur, "report")) {
+ nbChecks++;
+ test = xmlGetNoNsProp(cur, BAD_CAST "test");
+ if (test == NULL) {
+ xmlSchematronPErr(ctxt, cur,
+ XML_SCHEMAP_NOROOT,
+ "assert has no test attribute",
+ NULL, NULL);
+ } else if (test[0] == 0) {
+ xmlSchematronPErr(ctxt, cur,
+ XML_SCHEMAP_NOROOT,
+ "assert has an empty test attribute",
+ NULL, NULL);
+ xmlFree(test);
+ } else {
+ /* TODO will need dynamic processing instead */
+ report = xmlNodeGetContent(cur);
+
+ testptr = xmlSchematronAddTest(ctxt, XML_SCHEMATRON_REPORT,
+ ruleptr, cur, test, report);
+ if (testptr == NULL)
+ xmlFree(test);
+ }
+ } else {
+ xmlSchematronPErr(ctxt, cur,
+ XML_SCHEMAP_NOROOT,
+ "Expecting an assert or a report element instead of %s",
+ cur->name, NULL);
+ }
+ cur = cur->next;
+ NEXT_SCHEMATRON(cur);
+ }
+ if (nbChecks == 0) {
+ xmlSchematronPErr(ctxt, rule,
+ XML_SCHEMAP_NOROOT,
+ "rule has no assert nor report element", NULL, NULL);
+ }
+}
+
+/**
+ * xmlSchematronParsePattern:
+ * @ctxt: a schema validation context
+ * @pat: the pattern node
+ *
+ * parse a pattern element
+ */
+static void
+xmlSchematronParsePattern(xmlSchematronParserCtxtPtr ctxt, xmlNodePtr pat)
+{
+ xmlNodePtr cur;
+ xmlSchematronPatternPtr pattern;
+ int nbRules = 0;
+ xmlChar *id;
+
+ if ((ctxt == NULL) || (pat == NULL)) return;
+
+ id = xmlGetNoNsProp(pat, BAD_CAST "id");
+ if (id == NULL) {
+ id = xmlGetNoNsProp(pat, BAD_CAST "name");
+ }
+ pattern = xmlSchematronAddPattern(ctxt, ctxt->schema, pat, id);
+ if (pattern == NULL) {
+ if (id != NULL)
+ xmlFree(id);
+ return;
+ }
+ cur = pat->children;
+ NEXT_SCHEMATRON(cur);
+ while (cur != NULL) {
+ if (IS_SCHEMATRON(cur, "rule")) {
+ xmlSchematronParseRule(ctxt, pattern, cur);
+ nbRules++;
+ } else {
+ xmlSchematronPErr(ctxt, cur,
+ XML_SCHEMAP_NOROOT,
+ "Expecting a rule element instead of %s", cur->name, NULL);
+ }
+ cur = cur->next;
+ NEXT_SCHEMATRON(cur);
+ }
+ if (nbRules == 0) {
+ xmlSchematronPErr(ctxt, pat,
+ XML_SCHEMAP_NOROOT,
+ "Pattern has no rule element", NULL, NULL);
+ }
+}
+
+/**
+ * xmlSchematronLoadInclude:
+ * @ctxt: a schema validation context
+ * @cur: the include element
+ *
+ * Load the include document, Push the current pointer
+ *
+ * Returns the updated node pointer
+ */
+static xmlNodePtr
+xmlSchematronLoadInclude(xmlSchematronParserCtxtPtr ctxt, xmlNodePtr cur)
+{
+ xmlNodePtr ret = NULL;
+ xmlDocPtr doc = NULL;
+ xmlChar *href = NULL;
+ xmlChar *base = NULL;
+ xmlChar *URI = NULL;
+
+ if ((ctxt == NULL) || (cur == NULL))
+ return(NULL);
+
+ href = xmlGetNoNsProp(cur, BAD_CAST "href");
+ if (href == NULL) {
+ xmlSchematronPErr(ctxt, cur,
+ XML_SCHEMAP_NOROOT,
+ "Include has no href attribute", NULL, NULL);
+ return(cur->next);
+ }
+
+ /* do the URI base composition, load and find the root */
+ base = xmlNodeGetBase(cur->doc, cur);
+ URI = xmlBuildURI(href, base);
+ doc = xmlReadFile((const char *) URI, NULL, SCHEMATRON_PARSE_OPTIONS);
+ if (doc == NULL) {
+ xmlSchematronPErr(ctxt, cur,
+ XML_SCHEMAP_FAILED_LOAD,
+ "could not load include '%s'.\n",
+ URI, NULL);
+ goto done;
+ }
+ ret = xmlDocGetRootElement(doc);
+ if (ret == NULL) {
+ xmlSchematronPErr(ctxt, cur,
+ XML_SCHEMAP_FAILED_LOAD,
+ "could not find root from include '%s'.\n",
+ URI, NULL);
+ goto done;
+ }
+
+ /* Success, push the include for rollback on exit */
+ xmlSchematronPushInclude(ctxt, doc, cur);
+
+done:
+ if (ret == NULL) {
+ if (doc != NULL)
+ xmlFreeDoc(doc);
+ }
+ if (href == NULL)
+ xmlFree(href);
+ if (base == NULL)
+ xmlFree(base);
+ if (URI == NULL)
+ xmlFree(URI);
+ return(ret);
+}
+
+/**
+ * xmlSchematronParse:
+ * @ctxt: a schema validation context
+ *
+ * parse a schema definition resource and build an internal
+ * XML Shema struture which can be used to validate instances.
+ *
+ * Returns the internal XML Schematron structure built from the resource or
+ * NULL in case of error
+ */
+xmlSchematronPtr
+xmlSchematronParse(xmlSchematronParserCtxtPtr ctxt)
+{
+ xmlSchematronPtr ret = NULL;
+ xmlDocPtr doc;
+ xmlNodePtr root, cur;
+ int preserve = 0;
+
+ if (ctxt == NULL)
+ return (NULL);
+
+ ctxt->nberrors = 0;
+
+ /*
+ * First step is to parse the input document into an DOM/Infoset
+ */
+ if (ctxt->URL != NULL) {
+ doc = xmlReadFile((const char *) ctxt->URL, NULL,
+ SCHEMATRON_PARSE_OPTIONS);
+ if (doc == NULL) {
+ xmlSchematronPErr(ctxt, NULL,
+ XML_SCHEMAP_FAILED_LOAD,
+ "xmlSchematronParse: could not load '%s'.\n",
+ ctxt->URL, NULL);
+ return (NULL);
+ }
+ ctxt->preserve = 0;
+ } else if (ctxt->buffer != NULL) {
+ doc = xmlReadMemory(ctxt->buffer, ctxt->size, NULL, NULL,
+ SCHEMATRON_PARSE_OPTIONS);
+ if (doc == NULL) {
+ xmlSchematronPErr(ctxt, NULL,
+ XML_SCHEMAP_FAILED_PARSE,
+ "xmlSchematronParse: could not parse.\n",
+ NULL, NULL);
+ return (NULL);
+ }
+ doc->URL = xmlStrdup(BAD_CAST "in_memory_buffer");
+ ctxt->URL = xmlDictLookup(ctxt->dict, BAD_CAST "in_memory_buffer", -1);
+ ctxt->preserve = 0;
+ } else if (ctxt->doc != NULL) {
+ doc = ctxt->doc;
+ preserve = 1;
+ ctxt->preserve = 1;
+ } else {
+ xmlSchematronPErr(ctxt, NULL,
+ XML_SCHEMAP_NOTHING_TO_PARSE,
+ "xmlSchematronParse: could not parse.\n",
+ NULL, NULL);
+ return (NULL);
+ }
+
+ /*
+ * Then extract the root and Schematron parse it
+ */
+ root = xmlDocGetRootElement(doc);
+ if (root == NULL) {
+ xmlSchematronPErr(ctxt, (xmlNodePtr) doc,
+ XML_SCHEMAP_NOROOT,
+ "The schema has no document element.\n", NULL, NULL);
+ if (!preserve) {
+ xmlFreeDoc(doc);
+ }
+ return (NULL);
+ }
+
+ if (!IS_SCHEMATRON(root, "schema")) {
+ xmlSchematronPErr(ctxt, root,
+ XML_SCHEMAP_NOROOT,
+ "The XML document '%s' is not a XML schematron document",
+ ctxt->URL, NULL);
+ goto exit;
+ }
+ ret = xmlSchematronNewSchematron(ctxt);
+ if (ret == NULL)
+ goto exit;
+ ctxt->schema = ret;
+
+ /*
+ * scan the schema elements
+ */
+ cur = root->children;
+ NEXT_SCHEMATRON(cur);
+ if (IS_SCHEMATRON(cur, "title")) {
+ xmlChar *title = xmlNodeGetContent(cur);
+ if (title != NULL) {
+ ret->title = xmlDictLookup(ret->dict, title, -1);
+ xmlFree(title);
+ }
+ cur = cur->next;
+ NEXT_SCHEMATRON(cur);
+ }
+ while (IS_SCHEMATRON(cur, "ns")) {
+ xmlChar *prefix = xmlGetNoNsProp(cur, BAD_CAST "prefix");
+ xmlChar *uri = xmlGetNoNsProp(cur, BAD_CAST "uri");
+ if ((uri == NULL) || (uri[0] == 0)) {
+ xmlSchematronPErr(ctxt, cur,
+ XML_SCHEMAP_NOROOT,
+ "ns element has no uri", NULL, NULL);
+ }
+ if ((prefix == NULL) || (prefix[0] == 0)) {
+ xmlSchematronPErr(ctxt, cur,
+ XML_SCHEMAP_NOROOT,
+ "ns element has no prefix", NULL, NULL);
+ }
+ if ((prefix) && (uri)) {
+ xmlXPathRegisterNs(ctxt->xctxt, prefix, uri);
+ xmlSchematronAddNamespace(ctxt, prefix, uri);
+ ret->nbNs++;
+ }
+ if (uri)
+ xmlFree(uri);
+ if (prefix)
+ xmlFree(prefix);
+ cur = cur->next;
+ NEXT_SCHEMATRON(cur);
+ }
+ while (cur != NULL) {
+ if (IS_SCHEMATRON(cur, "pattern")) {
+ xmlSchematronParsePattern(ctxt, cur);
+ ret->nbPattern++;
+ } else {
+ xmlSchematronPErr(ctxt, cur,
+ XML_SCHEMAP_NOROOT,
+ "Expecting a pattern element instead of %s", cur->name, NULL);
+ }
+ cur = cur->next;
+ NEXT_SCHEMATRON(cur);
+ }
+ if (ret->nbPattern == 0) {
+ xmlSchematronPErr(ctxt, root,
+ XML_SCHEMAP_NOROOT,
+ "The schematron document '%s' has no pattern",
+ ctxt->URL, NULL);
+ goto exit;
+ }
+ /* the original document must be kept for reporting */
+ ret->doc = doc;
+ preserve = 1;
+
+exit:
+ if (!preserve) {
+ xmlFreeDoc(doc);
+ }
+ if (ctxt->nberrors != 0) {
+ xmlSchematronFree(ret);
+ ret = NULL;
+ } else {
+ ret->namespaces = ctxt->namespaces;
+ ret->nbNamespaces = ctxt->nbNamespaces;
+ ctxt->namespaces = NULL;
+ }
+ return (ret);
+}
+
+/************************************************************************
+ * *
+ * Schematrontron Reports handler *
+ * *
+ ************************************************************************/
+
+static xmlNodePtr
+xmlSchematronGetNode(xmlSchematronValidCtxtPtr ctxt,
+ xmlNodePtr cur, const xmlChar *xpath) {
+ xmlNodePtr node = NULL;
+ xmlXPathObjectPtr ret;
+
+ if ((ctxt == NULL) || (cur == NULL) || (xpath == NULL))
+ return(NULL);
+
+ ctxt->xctxt->doc = cur->doc;
+ ctxt->xctxt->node = cur;
+ ret = xmlXPathEval(xpath, ctxt->xctxt);
+ if (ret == NULL)
+ return(NULL);
+
+ if ((ret->type == XPATH_NODESET) &&
+ (ret->nodesetval != NULL) && (ret->nodesetval->nodeNr > 0))
+ node = ret->nodesetval->nodeTab[0];
+
+ xmlXPathFreeObject(ret);
+ return(node);
+}
+
+/**
+ * xmlSchematronReportOutput:
+ * @ctxt: the validation context
+ * @cur: the current node tested
+ * @msg: the message output
+ *
+ * Output part of the report to whatever channel the user selected
+ */
+static void
+xmlSchematronReportOutput(xmlSchematronValidCtxtPtr ctxt ATTRIBUTE_UNUSED,
+ xmlNodePtr cur ATTRIBUTE_UNUSED,
+ const char *msg) {
+ /* TODO */
+ fprintf(stderr, "%s", msg);
+}
+
+/**
+ * xmlSchematronFormatReport:
+ * @ctxt: the validation context
+ * @test: the test node
+ * @cur: the current node tested
+ *
+ * Build the string being reported to the user.
+ *
+ * Returns a report string or NULL in case of error. The string needs
+ * to be deallocated by teh caller
+ */
+static xmlChar *
+xmlSchematronFormatReport(xmlSchematronValidCtxtPtr ctxt,
+ xmlNodePtr test, xmlNodePtr cur) {
+ xmlChar *ret = NULL;
+ xmlNodePtr child, node;
+
+ if ((test == NULL) || (cur == NULL))
+ return(ret);
+
+ child = test->children;
+ while (child != NULL) {
+ if ((child->type == XML_TEXT_NODE) ||
+ (child->type == XML_CDATA_SECTION_NODE))
+ ret = xmlStrcat(ret, child->content);
+ else if (IS_SCHEMATRON(child, "name")) {
+ xmlChar *path;
+
+ path = xmlGetNoNsProp(child, BAD_CAST "path");
+
+ node = cur;
+ if (path != NULL) {
+ node = xmlSchematronGetNode(ctxt, cur, path);
+ if (node == NULL)
+ node = cur;
+ xmlFree(path);
+ }
+
+ if ((node->ns == NULL) || (node->ns->prefix == NULL))
+ ret = xmlStrcat(ret, node->name);
+ else {
+ ret = xmlStrcat(ret, node->ns->prefix);
+ ret = xmlStrcat(ret, BAD_CAST ":");
+ ret = xmlStrcat(ret, node->name);
+ }
+ } else {
+ child = child->next;
+ continue;
+ }
+
+ /*
+ * remove superfluous \n
+ */
+ if (ret != NULL) {
+ int len = xmlStrlen(ret);
+ xmlChar c;
+
+ if (len > 0) {
+ c = ret[len - 1];
+ if ((c == ' ') || (c == '\n') || (c == '\r') || (c == '\t')) {
+ while ((c == ' ') || (c == '\n') ||
+ (c == '\r') || (c == '\t')) {
+ len--;
+ if (len == 0)
+ break;
+ c = ret[len - 1];
+ }
+ ret[len] = ' ';
+ ret[len + 1] = 0;
+ }
+ }
+ }
+
+ child = child->next;
+ }
+ return(ret);
+}
+
+/**
+ * xmlSchematronReportSuccess:
+ * @ctxt: the validation context
+ * @test: the compiled test
+ * @cur: the current node tested
+ * @success: boolean value for the result
+ *
+ * called from the validation engine when an assert or report test have
+ * been done.
+ */
+static void
+xmlSchematronReportSuccess(xmlSchematronValidCtxtPtr ctxt,
+ xmlSchematronTestPtr test, xmlNodePtr cur, int success) {
+ if ((ctxt == NULL) || (cur == NULL) || (test == NULL))
+ return;
+ /* if quiet and not SVRL report only failures */
+ if ((ctxt->flags & XML_SCHEMATRON_OUT_QUIET) &&
+ ((ctxt->flags & XML_SCHEMATRON_OUT_XML) == 0) &&
+ (test->type == XML_SCHEMATRON_REPORT))
+ return;
+ if (ctxt->flags & XML_SCHEMATRON_OUT_XML) {
+ TODO
+ } else {
+ xmlChar *path;
+ char msg[1000];
+ long line;
+ const xmlChar *report = NULL;
+
+ if (((test->type == XML_SCHEMATRON_REPORT) & (!success)) ||
+ ((test->type == XML_SCHEMATRON_ASSERT) & (success)))
+ return;
+ line = xmlGetLineNo(cur);
+ path = xmlGetNodePath(cur);
+ if (path == NULL)
+ path = (xmlChar *) cur->name;
+#if 0
+ if ((test->report != NULL) && (test->report[0] != 0))
+ report = test->report;
+#endif
+ if (test->node != NULL)
+ report = xmlSchematronFormatReport(ctxt, test->node, cur);
+ if (report == NULL) {
+ if (test->type == XML_SCHEMATRON_ASSERT) {
+ snprintf(msg, 999, "%s line %ld: node failed assert\n",
+ (const char *) path, line);
+ } else {
+ snprintf(msg, 999, "%s line %ld: node failed report\n",
+ (const char *) path, line);
+ }
+ } else {
+ snprintf(msg, 999, "%s line %ld: %s\n", (const char *) path,
+ line, (const char *) report);
+ xmlFree((char *) report);
+ }
+ xmlSchematronReportOutput(ctxt, cur, &msg[0]);
+ if ((path != NULL) && (path != (xmlChar *) cur->name))
+ xmlFree(path);
+ }
+}
+
+/**
+ * xmlSchematronReportPattern:
+ * @ctxt: the validation context
+ * @pattern: the current pattern
+ *
+ * called from the validation engine when starting to check a pattern
+ */
+static void
+xmlSchematronReportPattern(xmlSchematronValidCtxtPtr ctxt,
+ xmlSchematronPatternPtr pattern) {
+ if ((ctxt == NULL) || (pattern == NULL))
+ return;
+ if (ctxt->flags & XML_SCHEMATRON_OUT_QUIET)
+ return;
+ if (ctxt->flags & XML_SCHEMATRON_OUT_XML) {
+ TODO
+ } else {
+ char msg[1000];
+
+ if (pattern->name == NULL)
+ return;
+ snprintf(msg, 999, "Pattern: %s\n", (const char *) pattern->name);
+ xmlSchematronReportOutput(ctxt, NULL, &msg[0]);
+ }
+}
+
+
+/************************************************************************
+ * *
+ * Validation against a Schematrontron *
+ * *
+ ************************************************************************/
+
+/**
+ * xmlSchematronNewValidCtxt:
+ * @schema: a precompiled XML Schematrons
+ * @options: a set of xmlSchematronValidOptions
+ *
+ * Create an XML Schematrons validation context based on the given schema.
+ *
+ * Returns the validation context or NULL in case of error
+ */
+xmlSchematronValidCtxtPtr
+xmlSchematronNewValidCtxt(xmlSchematronPtr schema, int options)
+{
+ int i;
+ xmlSchematronValidCtxtPtr ret;
+
+ ret = (xmlSchematronValidCtxtPtr) xmlMalloc(sizeof(xmlSchematronValidCtxt));
+ if (ret == NULL) {
+ xmlSchematronVErrMemory(NULL, "allocating validation context",
+ NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchematronValidCtxt));
+ ret->type = XML_STRON_CTXT_VALIDATOR;
+ ret->schema = schema;
+ ret->xctxt = xmlXPathNewContext(NULL);
+ ret->flags = options;
+ if (ret->xctxt == NULL) {
+ xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context",
+ NULL);
+ xmlSchematronFreeValidCtxt(ret);
+ return (NULL);
+ }
+ for (i = 0;i < schema->nbNamespaces;i++) {
+ if ((schema->namespaces[2 * i] == NULL) ||
+ (schema->namespaces[2 * i + 1] == NULL))
+ break;
+ xmlXPathRegisterNs(ret->xctxt, schema->namespaces[2 * i + 1],
+ schema->namespaces[2 * i]);
+ }
+ return (ret);
+}
+
+/**
+ * xmlSchematronFreeValidCtxt:
+ * @ctxt: the schema validation context
+ *
+ * Free the resources associated to the schema validation context
+ */
+void
+xmlSchematronFreeValidCtxt(xmlSchematronValidCtxtPtr ctxt)
+{
+ if (ctxt == NULL)
+ return;
+ if (ctxt->xctxt != NULL)
+ xmlXPathFreeContext(ctxt->xctxt);
+ if (ctxt->dict != NULL)
+ xmlDictFree(ctxt->dict);
+ xmlFree(ctxt);
+}
+
+static xmlNodePtr
+xmlSchematronNextNode(xmlNodePtr cur) {
+ if (cur->children != NULL) {
+ /*
+ * Do not descend on entities declarations
+ */
+ if (cur->children->type != XML_ENTITY_DECL) {
+ cur = cur->children;
+ /*
+ * Skip DTDs
+ */
+ if (cur->type != XML_DTD_NODE)
+ return(cur);
+ }
+ }
+
+ while (cur->next != NULL) {
+ cur = cur->next;
+ if ((cur->type != XML_ENTITY_DECL) &&
+ (cur->type != XML_DTD_NODE))
+ return(cur);
+ }
+
+ do {
+ cur = cur->parent;
+ if (cur == NULL) return(NULL);
+ if (cur->type == XML_DOCUMENT_NODE) return(NULL);
+ if (cur->next != NULL) {
+ cur = cur->next;
+ return(cur);
+ }
+ } while (cur != NULL);
+ return(cur);
+}
+
+/**
+ * xmlSchematronRunTest:
+ * @ctxt: the schema validation context
+ * @test: the current test
+ * @instance: the document instace tree
+ * @cur: the current node in the instance
+ *
+ * Validate a rule against a tree instance at a given position
+ *
+ * Returns 1 in case of success, 0 if error and -1 in case of internal error
+ */
+static int
+xmlSchematronRunTest(xmlSchematronValidCtxtPtr ctxt,
+ xmlSchematronTestPtr test, xmlDocPtr instance, xmlNodePtr cur)
+{
+ xmlXPathObjectPtr ret;
+ int failed;
+
+ failed = 0;
+ ctxt->xctxt->doc = instance;
+ ctxt->xctxt->node = cur;
+ ret = xmlXPathCompiledEval(test->comp, ctxt->xctxt);
+ if (ret == NULL) {
+ failed = 1;
+ } else {
+ switch (ret->type) {
+ case XPATH_XSLT_TREE:
+ case XPATH_NODESET:
+ if ((ret->nodesetval == NULL) ||
+ (ret->nodesetval->nodeNr == 0))
+ failed = 1;
+ break;
+ case XPATH_BOOLEAN:
+ failed = !ret->boolval;
+ break;
+ case XPATH_NUMBER:
+ if ((xmlXPathIsNaN(ret->floatval)) ||
+ (ret->floatval == 0.0))
+ failed = 1;
+ break;
+ case XPATH_STRING:
+ if ((ret->stringval == NULL) ||
+ (ret->stringval[0] == 0))
+ failed = 1;
+ break;
+ case XPATH_UNDEFINED:
+ case XPATH_POINT:
+ case XPATH_RANGE:
+ case XPATH_LOCATIONSET:
+ case XPATH_USERS:
+ failed = 1;
+ break;
+ }
+ xmlXPathFreeObject(ret);
+ }
+ if ((failed) && (test->type == XML_SCHEMATRON_ASSERT))
+ ctxt->nberrors++;
+ else if ((!failed) && (test->type == XML_SCHEMATRON_REPORT))
+ ctxt->nberrors++;
+
+ xmlSchematronReportSuccess(ctxt, test, cur, !failed);
+
+ return(!failed);
+}
+
+/**
+ * xmlSchematronValidateDoc:
+ * @ctxt: the schema validation context
+ * @instance: the document instace tree
+ *
+ * Validate a tree instance against the schematron
+ *
+ * Returns 0 in case of success, -1 in case of internal error
+ * and an error count otherwise.
+ */
+int
+xmlSchematronValidateDoc(xmlSchematronValidCtxtPtr ctxt, xmlDocPtr instance)
+{
+ xmlNodePtr cur, root;
+ xmlSchematronPatternPtr pattern;
+ xmlSchematronRulePtr rule;
+ xmlSchematronTestPtr test;
+
+ if ((ctxt == NULL) || (ctxt->schema == NULL) ||
+ (ctxt->schema->rules == NULL) || (instance == NULL))
+ return(-1);
+ ctxt->nberrors = 0;
+ root = xmlDocGetRootElement(instance);
+ if (root == NULL) {
+ TODO
+ ctxt->nberrors++;
+ return(1);
+ }
+ if ((ctxt->flags & XML_SCHEMATRON_OUT_QUIET) ||
+ (ctxt->flags == 0)) {
+ /*
+ * we are just trying to assert the validity of the document,
+ * speed primes over the output, run in a single pass
+ */
+ cur = root;
+ while (cur != NULL) {
+ rule = ctxt->schema->rules;
+ while (rule != NULL) {
+ if (xmlPatternMatch(rule->pattern, cur) == 1) {
+ test = rule->tests;
+ while (test != NULL) {
+ xmlSchematronRunTest(ctxt, test, instance, cur);
+ test = test->next;
+ }
+ }
+ rule = rule->next;
+ }
+
+ cur = xmlSchematronNextNode(cur);
+ }
+ } else {
+ /*
+ * 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...
+ * Check the exact semantic
+ */
+ cur = root;
+ while (cur != NULL) {
+ rule = pattern->rules;
+ while (rule != NULL) {
+ if (xmlPatternMatch(rule->pattern, cur) == 1) {
+ test = rule->tests;
+ while (test != NULL) {
+ xmlSchematronRunTest(ctxt, test, instance, cur);
+ test = test->next;
+ }
+ }
+ rule = rule->patnext;
+ }
+
+ cur = xmlSchematronNextNode(cur);
+ }
+ pattern = pattern->next;
+ }
+ }
+ return(ctxt->nberrors);
+}
+
+#ifdef STANDALONE
+int
+main(void)
+{
+ int ret;
+ xmlDocPtr instance;
+ xmlSchematronParserCtxtPtr pctxt;
+ xmlSchematronValidCtxtPtr vctxt;
+ xmlSchematronPtr schema = NULL;
+
+ pctxt = xmlSchematronNewParserCtxt("tst.sct");
+ if (pctxt == NULL) {
+ fprintf(stderr, "failed to build schematron parser\n");
+ } else {
+ schema = xmlSchematronParse(pctxt);
+ if (schema == NULL) {
+ fprintf(stderr, "failed to compile schematron\n");
+ }
+ xmlSchematronFreeParserCtxt(pctxt);
+ }
+ instance = xmlReadFile("tst.sct", NULL,
+ XML_PARSE_NOENT | XML_PARSE_NOCDATA);
+ if (instance == NULL) {
+ fprintf(stderr, "failed to parse instance\n");
+ }
+ if ((schema != NULL) && (instance != NULL)) {
+ vctxt = xmlSchematronNewValidCtxt(schema);
+ if (vctxt == NULL) {
+ fprintf(stderr, "failed to build schematron validator\n");
+ } else {
+ ret = xmlSchematronValidateDoc(vctxt, instance);
+ xmlSchematronFreeValidCtxt(vctxt);
+ }
+ }
+ xmlSchematronFree(schema);
+ xmlFreeDoc(instance);
+
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ return (0);
+}
+#endif
+#define bottom_schematron
+#include "elfgcchack.h"
+#endif /* LIBXML_SCHEMATRON_ENABLED */
diff --git a/test/HTML/script2.html b/test/HTML/script2.html
new file mode 100644
index 0000000..2606a83
--- /dev/null
+++ b/test/HTML/script2.html
@@ -0,0 +1,19 @@
+<!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" />
+<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>
+ Příliš žluťoučký kůŠúpěl ďábelksé ódy;
+ </p>
+</div>
+</body>
+</html>
+
diff --git a/test/expr/base b/test/expr/base
new file mode 100644
index 0000000..7ba11e2
--- /dev/null
+++ b/test/expr/base
@@ -0,0 +1,86 @@
+=>a
+1 a
+1 a | a
+0 b
+=>a|b
+1 a
+1 b
+1 a | b
+0 a{0}
+0 b{0}
+=>a | b | a
+1 a
+1 b
+1 a | b
+1 b | a
+1 a | b | b
+1 a | b | a
+1 b | a | b
+=>a,a
+1 a,a
+0 a
+0 a,a,a
+=>a{0,3}
+1 a{3}
+1 a
+1 a,a,a
+1 a{1,3}
+=>(a|b){0,4}
+1 a
+1 b
+1 a,b
+1 a,b,a,b
+0 b,a,b,a,b
+1 b,a{1,3}
+1 a{1,3},b
+0 a{1,3},b,a
+0 a{1,4},b
+0 a{0,5}
+1 (b|a){0,4}
+0 (b|a){0,4},a
+1 (a,b){0,2}
+1 (a,b){0,1},b
+=> a*
+1 a
+1 a?
+1 a+
+1 a*
+1 a{0}
+=> a+
+1 a
+0 a?
+1 a+
+0 a*
+1 a?,a
+1 a,a*
+1 a*,a
+1 a?,a*,a
+1 a*,a?,a
+=>(a|b)*
+1 a
+1 b
+1 a,b
+1 a,b,a,b
+1 (b|a){0,4}
+1 (b|a){0,4},a
+1 a*
+1 b*
+1 (a|b)*
+1 a{1,3}
+1 b,a{1,3}
+1 a{1,3},b
+1 a*,(a|b)*
+1 a*,b{2,5}
+1 a*,(a|b)*,b{2,5}
+=>(a|b)+,(c|d)
+1 a+,c
+0 a*,c
+1 a,c
+1 a,b*,a*,c
+# more complex
+=>(a|b),(a|c){0,100}
+1 a{0,100},(a|c)
+0 a{0,101},(a|c)
+# the example from cmsmcq at extreme markup 05
+=>(a, ((b, c, d){0,5}, e{0,1}){0,4}, f)
+1 (a, b, (c, d, b){2,3}, c, d, e, f)
diff --git a/test/relaxng/307377.rng b/test/relaxng/307377.rng
new file mode 100644
index 0000000..37a87c9
--- /dev/null
+++ b/test/relaxng/307377.rng
@@ -0,0 +1,14 @@
+<element name="number" xmlns="http://relaxng.org/ns/structure/1.0">
+ <attribute name="val">
+ <list>
+ <oneOrMore>
+ <choice>
+ <value>1</value>
+ <value>2</value>
+ <value>3</value>
+ </choice>
+ </oneOrMore>
+ </list>
+ </attribute>
+ <text/>
+</element>
diff --git a/test/relaxng/307377_0.xml b/test/relaxng/307377_0.xml
new file mode 100644
index 0000000..106d02a
--- /dev/null
+++ b/test/relaxng/307377_0.xml
@@ -0,0 +1 @@
+<number val="a 1 b 2 c 3" />
diff --git a/test/relaxng/307377_1.xml b/test/relaxng/307377_1.xml
new file mode 100644
index 0000000..73b0d1c
--- /dev/null
+++ b/test/relaxng/307377_1.xml
@@ -0,0 +1 @@
+<number val="1 a 2 b 3 c" />
diff --git a/test/relaxng/307377_2.xml b/test/relaxng/307377_2.xml
new file mode 100644
index 0000000..4a041aa
--- /dev/null
+++ b/test/relaxng/307377_2.xml
@@ -0,0 +1 @@
+<number val="1 2 3" />
diff --git a/test/relaxng/docbook_0.xml b/test/relaxng/docbook_0.xml
index 963d8e7..ede051d 100644
--- a/test/relaxng/docbook_0.xml
+++ b/test/relaxng/docbook_0.xml
@@ -1,6 +1,5 @@
<?xml version="1.0"?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "../dtd/4.1.2/docbookx.dtd" [
+<!DOCTYPE article [
<!ENTITY version "1.0.53">
<!ENTITY mdash "--">
<!ENTITY hellip "...">
diff --git a/test/schemas/.memdump b/test/schemas/.memdump
index 0a6efc4..f2a70c2 100644
--- a/test/schemas/.memdump
+++ b/test/schemas/.memdump
@@ -1,4 +1,4 @@
- 01:13:40 PM
+ 05:55:56 PM
- MEMORY ALLOCATED : 0, MAX was 28425
+ MEMORY ALLOCATED : 0, MAX was 31048
BLOCK NUMBER SIZE TYPE
diff --git a/test/schemas/allsg_0.xml b/test/schemas/allsg_0.xml
new file mode 100644
index 0000000..814646f
--- /dev/null
+++ b/test/schemas/allsg_0.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<foo xmlns="urn:test:foo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo sg-all.xsd">
+ <gm-B-2/>
+ <gm-A-1/>
+</foo> \ No newline at end of file
diff --git a/test/schemas/allsg_0.xsd b/test/schemas/allsg_0.xsd
new file mode 100644
index 0000000..11d27a8
--- /dev/null
+++ b/test/schemas/allsg_0.xsd
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="urn:test:foo"
+ xmlns:foo="urn:test:foo">
+
+ <!-- Substitution group heads. -->
+ <xsd:element name="gh-A" abstract="true"/>
+ <xsd:element name="gh-B" abstract="true"/>
+
+ <!-- Substitution group members. -->
+ <xsd:element name="gm-A-1" substitutionGroup="foo:gh-A"/>
+ <xsd:element name="gm-A-2" substitutionGroup="foo:gh-A"/>
+
+ <xsd:element name="gm-B-1" substitutionGroup="foo:gh-B"/>
+ <xsd:element name="gm-B-2" substitutionGroup="foo:gh-B"/>
+
+ <xsd:element name="foo">
+ <xsd:complexType>
+ <xsd:all>
+ <xsd:element ref="foo:gh-A"/>
+ <xsd:element ref="foo:gh-B"/>
+ </xsd:all>
+ </xsd:complexType>
+ </xsd:element>
+
+</xsd:schema> \ No newline at end of file
diff --git a/test/schemas/allsg_1.xml b/test/schemas/allsg_1.xml
new file mode 100644
index 0000000..d1dc9c4
--- /dev/null
+++ b/test/schemas/allsg_1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<foo xmlns="urn:test:foo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo sg-all.xsd">
+ <gm-B-2/>
+ <gm-A-2/>
+</foo>
+
diff --git a/test/schemas/allsg_2.xml b/test/schemas/allsg_2.xml
new file mode 100644
index 0000000..b39cb7a
--- /dev/null
+++ b/test/schemas/allsg_2.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<foo xmlns="urn:test:foo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo sg-all.xsd">
+ <gm-A-2/>
+ <gm-B-2/>
+</foo>
+
diff --git a/test/schemas/allsg_3.xml b/test/schemas/allsg_3.xml
new file mode 100644
index 0000000..ac37b7b
--- /dev/null
+++ b/test/schemas/allsg_3.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<foo xmlns="urn:test:foo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo sg-all.xsd">
+ <gm-B-2/>
+ <gm-B-1/>
+</foo>
diff --git a/test/schemas/allsg_4.xml b/test/schemas/allsg_4.xml
new file mode 100644
index 0000000..bbb654a
--- /dev/null
+++ b/test/schemas/allsg_4.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<foo xmlns="urn:test:foo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo sg-all.xsd">
+ <gm-A-1/>
+ <gm-A-1/>
+</foo>
diff --git a/test/schemas/allsg_5.xml b/test/schemas/allsg_5.xml
new file mode 100644
index 0000000..44dde3e
--- /dev/null
+++ b/test/schemas/allsg_5.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<foo xmlns="urn:test:foo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo sg-all.xsd">
+ <gm-B-1/>
+ <gm-A-2/>
+ <gm-B-2/>
+</foo>
diff --git a/test/schemas/any5_0.xml b/test/schemas/any5_0.xml
new file mode 100644
index 0000000..e716cb1
--- /dev/null
+++ b/test/schemas/any5_0.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<foo xmlns="urn:test:foo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo any5_0.xsd">
+ <boo/>
+ <boo/>
+</foo>
diff --git a/test/schemas/any5_0.xsd b/test/schemas/any5_0.xsd
new file mode 100644
index 0000000..70c8789
--- /dev/null
+++ b/test/schemas/any5_0.xsd
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="urn:test:foo"
+ elementFormDefault="qualified">
+ <xsd:element name="foo">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="boo"/>
+ <xsd:any namespace="##other" maxOccurs="5" processContents="lax"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema> \ No newline at end of file
diff --git a/test/schemas/any5_1.xml b/test/schemas/any5_1.xml
new file mode 100644
index 0000000..91dcb54
--- /dev/null
+++ b/test/schemas/any5_1.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo xmlns="urn:test:foo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo any5_0.xsd">
+ <boo/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+</foo>
diff --git a/test/schemas/any5_1.xsd b/test/schemas/any5_1.xsd
new file mode 100644
index 0000000..4d3c9de
--- /dev/null
+++ b/test/schemas/any5_1.xsd
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="urn:test:foo"
+ elementFormDefault="qualified">
+ <xsd:element name="foo">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="boo"/>
+ <xsd:any namespace="##other" maxOccurs="5" processContents="lax"/>
+ <xsd:element name="boo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/test/schemas/any5_2.xml b/test/schemas/any5_2.xml
new file mode 100644
index 0000000..e8434d1
--- /dev/null
+++ b/test/schemas/any5_2.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<foo xmlns="urn:test:foo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo any5_0.xsd">
+ <boo/>
+ <boo xmlns="urn:test:bar"/>
+ <boo/>
+</foo>
diff --git a/test/schemas/any5_3.xml b/test/schemas/any5_3.xml
new file mode 100644
index 0000000..828c4b3
--- /dev/null
+++ b/test/schemas/any5_3.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<foo xmlns="urn:test:foo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo any5_0.xsd">
+ <boo/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+</foo>
diff --git a/test/schemas/any5_4.xml b/test/schemas/any5_4.xml
new file mode 100644
index 0000000..91dcb54
--- /dev/null
+++ b/test/schemas/any5_4.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo xmlns="urn:test:foo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo any5_0.xsd">
+ <boo/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+</foo>
diff --git a/test/schemas/any5_5.xml b/test/schemas/any5_5.xml
new file mode 100644
index 0000000..e09d8a1
--- /dev/null
+++ b/test/schemas/any5_5.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<foo xmlns="urn:test:foo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo any5_0.xsd">
+ <boo/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo/>
+</foo>
diff --git a/test/schemas/any5_6.xml b/test/schemas/any5_6.xml
new file mode 100644
index 0000000..3b0ad73
--- /dev/null
+++ b/test/schemas/any5_6.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<foo xmlns="urn:test:foo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo any5_0.xsd">
+ <boo/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo xmlns="urn:test:bar"/>
+ <boo/>
+</foo>
diff --git a/test/schemas/any6_0.xml b/test/schemas/any6_0.xml
new file mode 100755
index 0000000..068a1a9
--- /dev/null
+++ b/test/schemas/any6_0.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!-- Dummy instance for any-1_1.xsd -->
+<foo:foo xmlns:foo="urn:test:foo" xmlns:moo="urn:test:moo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo any-1_1.xsd">
+ <foo:bar/>
+ <moo:moo/>
+</foo:foo> \ No newline at end of file
diff --git a/test/schemas/any6_1.xsd b/test/schemas/any6_1.xsd
new file mode 100644
index 0000000..23b2f5d
--- /dev/null
+++ b/test/schemas/any6_1.xsd
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<!--
+Content model error:
+
+any-err-not-determinist-1.xsd:29: element complexType: Schemas parser error :
+local complex type: The content model is not determinist.
+
+As per Xerces and XSV this schema is OK.
+
+The problem appears when the maxOccurs of <bar> is greater than
+the one of the <any> wildcard. Additionally if both are "unbounded".
+If the latter is a different issue we should add an explicit test
+for it.
+
+Examples:
+<bar> <any> result
+ 2 1 error
+ 2 2 OK
+ 1 2 OK
+ unbounded 2 error
+ unbounded unbounded error
+ 2 unbounded OK
+-->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="urn:test:foo"
+ elementFormDefault="qualified">
+ <xs:element name="foo">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="bar" maxOccurs="2"/>
+ <xs:any namespace="##other" maxOccurs="1" processContents="lax"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema> \ No newline at end of file
diff --git a/test/schemas/any6_2.xsd b/test/schemas/any6_2.xsd
new file mode 100644
index 0000000..a552ca8
--- /dev/null
+++ b/test/schemas/any6_2.xsd
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!--
+ "element complexType: Schemas parser error :
+ local complex type: The content model is not determinist."
+
+ This schema is OK with XSV and Xerces.
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="urn:test:foo"
+ elementFormDefault="qualified">
+ <xs:element name="foo">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="bar" maxOccurs="unbounded"/>
+ <xs:any namespace="##other" processContents="lax"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/any7_0.xml b/test/schemas/any7_0.xml
new file mode 100755
index 0000000..288b1e7
--- /dev/null
+++ b/test/schemas/any7_0.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!--
+No error reported.
+
+Seems like <moo> is accepted, but should not, since "##other" rules out
+elements in no namespace.
+
+Xerces reports:
+any-err-2.xml:18,8: (Error) cvc-complex-type.2.4.a: Invalid content starting
+with element 'moo'.
+One of '{"urn:test:foo":bar, WC[##other:"urn:test:foo"]}' is expected.
+
+-->
+<foo:foo xmlns:foo="urn:test:foo" xmlns:moo="urn:test:moo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo any-2_1.xsd">
+ <foo:bar/>
+ <moo/>
+</foo:foo>
diff --git a/test/schemas/any7_1.xml b/test/schemas/any7_1.xml
new file mode 100755
index 0000000..624c712
--- /dev/null
+++ b/test/schemas/any7_1.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!--
+Error reported:
+
+any-2_1.xml:17: element bar: Schemas validity error :
+Element '{urn:test:foo}bar': This element is not expected.
+Expected is one of ( {##other:urn:test:foo}* ).
+
+Tiny glitch: the error report mechanism fails to recognize
+that there is only one element of choice. It should report:
+"Excepted is ( {##other:urn:test:foo}* ).".
+-->
+<foo:foo xmlns:foo="urn:test:foo" xmlns:moo="urn:test:moo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo any-2_1.xsd">
+ <foo:bar/>
+ <foo:bar/>
+</foo:foo> \ No newline at end of file
diff --git a/test/schemas/any7_1.xsd b/test/schemas/any7_1.xsd
new file mode 100755
index 0000000..546904f
--- /dev/null
+++ b/test/schemas/any7_1.xsd
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="urn:test:foo"
+ elementFormDefault="qualified">
+ <xs:element name="foo">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="bar"/>
+ <xs:any namespace="##other" processContents="lax"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema> \ No newline at end of file
diff --git a/test/schemas/any7_2.xml b/test/schemas/any7_2.xml
new file mode 100644
index 0000000..66d84d0
--- /dev/null
+++ b/test/schemas/any7_2.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!--
+No error reported.
+
+Seems like <moo> is accepted, but should not, since "##other" rules out
+elements in no namespace.
+
+Xerces reports:
+any-err-2.xml:18,8: (Error) cvc-complex-type.2.4.a: Invalid content starting
+with element 'moo'.
+One of '{"urn:test:foo":bar, WC[##other:"urn:test:foo"]}' is expected.
+
+-->
+<foo:foo xmlns:foo="urn:test:foo" xmlns:moo="urn:test:moo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo any7_2.xsd">
+ <foo:bar/>
+ <moo:moo/>
+</foo:foo>
+
diff --git a/test/schemas/any7_2.xsd b/test/schemas/any7_2.xsd
new file mode 100755
index 0000000..cabfd98
--- /dev/null
+++ b/test/schemas/any7_2.xsd
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="urn:test:foo"
+ elementFormDefault="qualified">
+ <xs:element name="foo">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="bar"/>
+ <xs:any namespace="##other" processContents="lax" maxOccurs="2"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/any8_0.xml b/test/schemas/any8_0.xml
new file mode 100644
index 0000000..6e87cff
--- /dev/null
+++ b/test/schemas/any8_0.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<foo:foo xmlns:foo="urn:test:foo"
+ xmlns:moo="urn:test:moo"
+ xmlns:boo="urn:test:boo"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:test:foo any8_1.xsd">
+ <foo:bar/>
+ <foo:bar/>
+</foo:foo>
diff --git a/test/schemas/any8_1.xsd b/test/schemas/any8_1.xsd
new file mode 100644
index 0000000..9264893
--- /dev/null
+++ b/test/schemas/any8_1.xsd
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!--
+ "element complexType: Schemas parser error :
+ local complex type: The content model is not determinist."
+
+ This schema is OK with XSV and Xerces.
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="urn:test:foo"
+ elementFormDefault="qualified">
+ <xs:element name="foo">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="bar"/>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0"/>
+ <xs:element name="bar"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/test/schemas/bug310264_0.xml b/test/schemas/bug310264_0.xml
new file mode 100644
index 0000000..98f057c
--- /dev/null
+++ b/test/schemas/bug310264_0.xml
@@ -0,0 +1,41 @@
+<c xmlns="http://myns" >
+ <a/> <!-- 1 -->
+ <a/> <!-- 2 -->
+ <a/> <!-- 3 -->
+ <a/> <!-- 4 -->
+ <a/> <!-- 5 -->
+ <a/> <!-- 6 -->
+ <a/> <!-- 7 -->
+ <a/> <!-- 8 -->
+ <a/> <!-- 9 -->
+ <a/> <!-- 10 -->
+ <a/> <!-- 1 -->
+ <a/> <!-- 2 -->
+ <a/> <!-- 3 -->
+ <a/> <!-- 4 -->
+ <a/> <!-- 5 -->
+ <a/> <!-- 6 -->
+ <a/> <!-- 7 -->
+ <a/> <!-- 8 -->
+ <a/> <!-- 9 -->
+ <a/> <!-- 20 -->
+ <a/> <!-- 1 -->
+ <a/> <!-- 2 -->
+ <a/> <!-- 3 -->
+ <a/> <!-- 4 -->
+ <a/> <!-- 5 -->
+ <a/> <!-- 6 -->
+ <a/> <!-- 7 -->
+ <a/> <!-- 8 -->
+ <a/> <!-- 9 -->
+ <a/> <!-- 30 -->
+ <a/> <!-- 1 -->
+ <a/> <!-- 2 -->
+ <a/> <!-- 3 -->
+ <a/> <!-- 4 -->
+ <a/> <!-- 5 -->
+ <a/> <!-- 6 -->
+ <a/> <!-- 7 -->
+ <a/> <!-- 8 -->
+</c>
+
diff --git a/test/schemas/bug310264_0.xsd b/test/schemas/bug310264_0.xsd
new file mode 100644
index 0000000..6f2b333
--- /dev/null
+++ b/test/schemas/bug310264_0.xsd
@@ -0,0 +1,18 @@
+<xs:schema xmlns:tns="http://myns"
+ targetNamespace="http://myns"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+>
+
+ <xs:element name="a" />
+
+ <xs:complexType name="c" >
+ <xs:sequence minOccurs="2" maxOccurs="4">
+ <xs:sequence minOccurs="19" maxOccurs="20">
+ <xs:element ref="tns:a" />
+ </xs:sequence>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:element name="c" type="tns:c" />
+
+</xs:schema>
diff --git a/test/schemas/bug312957_0.xml b/test/schemas/bug312957_0.xml
new file mode 100644
index 0000000..c22444f
--- /dev/null
+++ b/test/schemas/bug312957_0.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<family xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="bug312957_1.xsd"
+ name="test">
+ <siblings>
+ <sibling name="gill"/>
+ </siblings>
+ <sisters>
+ <sister name="gill"/>
+ <sister name="annie"/>
+ </sisters>
+</family>
+
+
diff --git a/test/schemas/bug312957_1.xsd b/test/schemas/bug312957_1.xsd
new file mode 100644
index 0000000..fb7972e
--- /dev/null
+++ b/test/schemas/bug312957_1.xsd
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="family" type="family_type">
+ <xs:key name="sibling_key">
+ <xs:selector xpath="siblings/sibling"/>
+ <xs:field xpath="@name"/>
+ </xs:key>
+ <xs:keyref name="sibling_key_ref" refer="sibling_key">
+ <xs:selector xpath="sisters/sister"/>
+ <xs:field xpath="@name"/>
+ </xs:keyref>
+ </xs:element>
+ <xs:complexType name="family_type">
+ <xs:sequence>
+ <xs:element name="siblings" type="siblings_type" />
+ <xs:element name="sisters" type="sisters_type" />
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string"/>
+ </xs:complexType>
+ <xs:complexType name="siblings_type">
+ <xs:sequence>
+ <xs:element name="sibling" type="sibling_type" minOccurs="0"
+maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="sisters_type">
+ <xs:sequence>
+ <xs:element name="sister" type="sister_type" minOccurs="0"
+maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="sibling_type">
+ <xs:attribute name="name" type="xs:string"/>
+ </xs:complexType>
+ <xs:complexType name="sister_type">
+ <xs:attribute name="name" type="xs:string"/>
+ </xs:complexType>
+</xs:schema>
diff --git a/test/schemas/bug313982_0.xml b/test/schemas/bug313982_0.xml
new file mode 100644
index 0000000..18c81ea
--- /dev/null
+++ b/test/schemas/bug313982_0.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testDecimalFacet xmlns="http://www.foo.com"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.foo.com bug313982_0.xsd">0.99</testDecimalFacet>
diff --git a/test/schemas/bug313982_0.xsd b/test/schemas/bug313982_0.xsd
new file mode 100644
index 0000000..69d0613
--- /dev/null
+++ b/test/schemas/bug313982_0.xsd
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema targetNamespace="http://www.foo.com" elementFormDefault="qualified"
+xmlns="http://www.foo.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="testDecimalFacet">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:decimal">
+ <xsd:minInclusive value="0"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+</xsd:schema>
diff --git a/test/schemas/extension2_0.xml b/test/schemas/extension2_0.xml
new file mode 100644
index 0000000..202c988
--- /dev/null
+++ b/test/schemas/extension2_0.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<foo xmlns="http://myns"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://myns extension2_1.xsd"/>
diff --git a/test/schemas/extension2_1.xsd b/test/schemas/extension2_1.xsd
new file mode 100644
index 0000000..0fa88af
--- /dev/null
+++ b/test/schemas/extension2_1.xsd
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns="http://myns"
+ targetNamespace="http://myns"
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified"
+ xml:lang="en">
+
+ <xs:complexType name="dataInlineType">
+ <xs:complexContent>
+ <xs:extension base="xs:anyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <xs:element name="foo" type="dataInlineType"/>
+
+ </xs:schema>
diff --git a/test/schematron/.memdump b/test/schematron/.memdump
new file mode 100644
index 0000000..3e7dafa
--- /dev/null
+++ b/test/schematron/.memdump
@@ -0,0 +1,4 @@
+ 04:51:26 PM
+
+ MEMORY ALLOCATED : 0, MAX was 40912
+BLOCK NUMBER SIZE TYPE
diff --git a/test/schematron/zvon1.sct b/test/schematron/zvon1.sct
new file mode 100644
index 0000000..36179dd
--- /dev/null
+++ b/test/schematron/zvon1.sct
@@ -0,0 +1,23 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Print both cases">
+ <rule context="AAA">
+ <assert test="BBB">BBB element is missing.</assert>
+ <report test="BBB">BBB element is present.</report>
+ <assert test="@name">AAA misses attribute name.</assert>
+ <report test="@name">AAA contains attribute name.</report>
+ </rule>
+ </pattern>
+ <pattern name="Print positive result only">
+ <rule context="AAA">
+ <report test="BBB">BBB element is present.</report>
+ <report test="@name">AAA contains attribute name.</report>
+ </rule>
+ </pattern>
+ <pattern name="Print negative result only">
+ <rule context="AAA">
+ <assert test="BBB">BBB element is missing.</assert>
+ <assert test="@name">AAA misses attribute name.</assert>
+ </rule>
+ </pattern>
+</schema>
+
diff --git a/test/schematron/zvon10.sct b/test/schematron/zvon10.sct
new file mode 100644
index 0000000..783fac5
--- /dev/null
+++ b/test/schematron/zvon10.sct
@@ -0,0 +1,15 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Open model">
+ <rule context="AAA">
+ <assert test="BBB"> BBB element is not present</assert>
+ <assert test="CCC"> CCC element is not present</assert>
+ </rule>
+ </pattern>
+ <pattern name="Closed model">
+ <rule context="AAA">
+ <assert test="BBB"> BBB element is not present</assert>
+ <assert test="CCC"> CCC element is not present</assert>
+ <assert test="count(BBB|CCC) = count (*)">There is an extra element</assert>
+ </rule>
+ </pattern>
+</schema>
diff --git a/test/schematron/zvon10_0.xml b/test/schematron/zvon10_0.xml
new file mode 100644
index 0000000..d3ac388
--- /dev/null
+++ b/test/schematron/zvon10_0.xml
@@ -0,0 +1,3 @@
+<AAA>
+ <BBB/>
+</AAA>
diff --git a/test/schematron/zvon10_1.xml b/test/schematron/zvon10_1.xml
new file mode 100644
index 0000000..ba9bdca
--- /dev/null
+++ b/test/schematron/zvon10_1.xml
@@ -0,0 +1,4 @@
+<AAA>
+ <BBB/>
+ <DDD/>
+</AAA>
diff --git a/test/schematron/zvon11.sct b/test/schematron/zvon11.sct
new file mode 100644
index 0000000..79b01fd
--- /dev/null
+++ b/test/schematron/zvon11.sct
@@ -0,0 +1,8 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Attributes present">
+ <rule context="BBB">
+ <assert test="not(@aaa) or (@aaa and @bbb)">The element must not have an isolated aaa attribute</assert>
+ <assert test="not(@bbb) or (@aaa and @bbb)">The element must not have an isolated bbb attribute</assert>
+ </rule>
+ </pattern>
+</schema>
diff --git a/test/schematron/zvon11_0.xml b/test/schematron/zvon11_0.xml
new file mode 100644
index 0000000..f065eed
--- /dev/null
+++ b/test/schematron/zvon11_0.xml
@@ -0,0 +1,3 @@
+<AAA>
+ <BBB aaa="A" bbb="B"/>
+</AAA>
diff --git a/test/schematron/zvon11_1.xml b/test/schematron/zvon11_1.xml
new file mode 100644
index 0000000..c889933
--- /dev/null
+++ b/test/schematron/zvon11_1.xml
@@ -0,0 +1,3 @@
+<AAA>
+ <BBB bbb="B"/>
+</AAA>
diff --git a/test/schematron/zvon11_2.xml b/test/schematron/zvon11_2.xml
new file mode 100644
index 0000000..26e1221
--- /dev/null
+++ b/test/schematron/zvon11_2.xml
@@ -0,0 +1,3 @@
+<AAA>
+ <BBB aaa="A"/>
+</AAA>
diff --git a/test/schematron/zvon11_3.xml b/test/schematron/zvon11_3.xml
new file mode 100644
index 0000000..d3ac388
--- /dev/null
+++ b/test/schematron/zvon11_3.xml
@@ -0,0 +1,3 @@
+<AAA>
+ <BBB/>
+</AAA>
diff --git a/test/schematron/zvon12.sct b/test/schematron/zvon12.sct
new file mode 100644
index 0000000..049b125
--- /dev/null
+++ b/test/schematron/zvon12.sct
@@ -0,0 +1,8 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Number of characters in an abbreviation">
+ <rule context="BBB">
+ <report test="string-length(@bbb) &lt; 2">There is not enough letters in the abbreviation</report>
+ <report test="string-length(@bbb) > 3">There is too much letters in the abbreviation</report>
+ </rule>
+ </pattern>
+</schema>
diff --git a/test/schematron/zvon12_0.xml b/test/schematron/zvon12_0.xml
new file mode 100644
index 0000000..d5f28d5
--- /dev/null
+++ b/test/schematron/zvon12_0.xml
@@ -0,0 +1,3 @@
+<AAA>
+ <BBB bbb="C"/>
+</AAA>
diff --git a/test/schematron/zvon12_1.xml b/test/schematron/zvon12_1.xml
new file mode 100644
index 0000000..3507f6b
--- /dev/null
+++ b/test/schematron/zvon12_1.xml
@@ -0,0 +1,3 @@
+<AAA>
+ <BBB bbb="CZ"/>
+</AAA>
diff --git a/test/schematron/zvon12_2.xml b/test/schematron/zvon12_2.xml
new file mode 100644
index 0000000..e0d81af
--- /dev/null
+++ b/test/schematron/zvon12_2.xml
@@ -0,0 +1,3 @@
+<AAA>
+ <BBB bbb="CZCZ"/>
+</AAA>
diff --git a/test/schematron/zvon13.sct b/test/schematron/zvon13.sct
new file mode 100644
index 0000000..cd433e0
--- /dev/null
+++ b/test/schematron/zvon13.sct
@@ -0,0 +1,7 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Sum equals 100%.">
+ <rule context="Total">
+ <assert test="sum(//Percent) = 100">The values do not sum to 100%. </assert>
+ </rule>
+ </pattern>
+</schema>
diff --git a/test/schematron/zvon13_0.xml b/test/schematron/zvon13_0.xml
new file mode 100644
index 0000000..52619c3
--- /dev/null
+++ b/test/schematron/zvon13_0.xml
@@ -0,0 +1,6 @@
+<Total>
+ <Percent>20</Percent>
+ <Percent>30</Percent>
+ <Percent>10</Percent>
+ <Percent>50</Percent>
+</Total>
diff --git a/test/schematron/zvon13_1.xml b/test/schematron/zvon13_1.xml
new file mode 100644
index 0000000..8fb7368
--- /dev/null
+++ b/test/schematron/zvon13_1.xml
@@ -0,0 +1,5 @@
+<Total>
+ <Percent>20</Percent>
+ <Percent>10</Percent>
+ <Percent>50</Percent>
+</Total>
diff --git a/test/schematron/zvon13_2.xml b/test/schematron/zvon13_2.xml
new file mode 100644
index 0000000..af4d76a
--- /dev/null
+++ b/test/schematron/zvon13_2.xml
@@ -0,0 +1,5 @@
+<Total>
+ <Percent>20</Percent>
+ <Percent>30</Percent>
+ <Percent>50</Percent>
+</Total>
diff --git a/test/schematron/zvon14.sct b/test/schematron/zvon14.sct
new file mode 100644
index 0000000..f98b6d8
--- /dev/null
+++ b/test/schematron/zvon14.sct
@@ -0,0 +1,10 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="a child of selected elements">
+ <rule context="CCC">
+ <assert test="parent::*[name()='BBB' or name()='DDD']">Element CCC must not be a child of element
+ <name path="parent::*"/>
+ </assert>
+ </rule>
+ </pattern>
+</schema>
+
diff --git a/test/schematron/zvon14_0.xml b/test/schematron/zvon14_0.xml
new file mode 100644
index 0000000..b627043
--- /dev/null
+++ b/test/schematron/zvon14_0.xml
@@ -0,0 +1,12 @@
+<AAA>
+ <BBB>
+ <CCC/>
+ </BBB>
+ <CCC/>
+ <DDD>
+ <CCC/>
+ <EEE>
+ <CCC/>
+ </EEE>
+ </DDD>
+</AAA>
diff --git a/test/schematron/zvon15.sct b/test/schematron/zvon15.sct
new file mode 100644
index 0000000..7da5d86
--- /dev/null
+++ b/test/schematron/zvon15.sct
@@ -0,0 +1,11 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="id is the only permited attribute name">
+ <rule context="*">
+ <report test="@*[not(name()='id')]">Attribute
+ <name path="@*[not(name()='id')]"/> is forbidden in element
+ <name/>
+ </report>
+ </rule>
+ </pattern>
+</schema>
+
diff --git a/test/schematron/zvon15_0.xml b/test/schematron/zvon15_0.xml
new file mode 100644
index 0000000..390aedb
--- /dev/null
+++ b/test/schematron/zvon15_0.xml
@@ -0,0 +1,4 @@
+<AAA name="aaa">
+<BBB id="bbb"/>
+<CCC color="ccc"/>
+</AAA>
diff --git a/test/schematron/zvon16.sct b/test/schematron/zvon16.sct
new file mode 100644
index 0000000..3be75cd
--- /dev/null
+++ b/test/schematron/zvon16.sct
@@ -0,0 +1,30 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Required ID">
+ <rule context="cat | dog">
+ <assert test="@id">An element of type
+ <name/> should have an id attribute that is a unique identifier for that animal.
+ </assert>
+ </rule>
+ </pattern>
+ <pattern name="Required IDREF">
+ <rule context="catowner">
+ <assert test="@pet">An element of type
+ <name/> should have a pet attribute.
+ </assert>
+ </rule>
+ </pattern>
+ <pattern name="IDREF should reference an ID used in the same document">
+ <rule context="catowner[@pet]">
+ <assert test="id(@pet)">An element of type
+ <name/> should have a pet attribute that should contain a unique identifier.
+ </assert>
+ </rule>
+ </pattern>
+ <pattern name="IDREF should reference an ID of a certain element type only">
+ <rule context="catowner[@pet]">
+ <assert test="(name(id(@pet)) ='cat')">An element of type
+ <name/> should have a pet attribute that should contain the unique identifier for a cat.
+ </assert>
+ </rule>
+ </pattern>
+</schema>
diff --git a/test/schematron/zvon16_0.xml b/test/schematron/zvon16_0.xml
new file mode 100644
index 0000000..95132e1
--- /dev/null
+++ b/test/schematron/zvon16_0.xml
@@ -0,0 +1,19 @@
+<!DOCTYPE ideg
+[
+<!ELEMENT ideg ( dog, cat, catowner+ )>
+<!ELEMENT dog ( #PCDATA )>
+<!ELEMENT cat ( #PCDATA )>
+<!ELEMENT catowner ( #PCDATA )>
+<!ATTLIST dog id ID #REQUIRED >
+<!ATTLIST cat id ID #REQUIRED >
+<!ATTLIST catowner pet IDREF #REQUIRED>
+]>
+<ideg>
+ <dog id="danny" >Danny</dog>
+ <cat id="bede" >Bede</cat>
+ <catowner >Harold</catowner>
+ <catowner pet="poochi" >Fumiaki</catowner>
+ <catowner pet="danny" >Jimmy</catowner>
+ <catowner pet="bede" >Rick</catowner>
+</ideg>
+
diff --git a/test/schematron/zvon1_0.xml b/test/schematron/zvon1_0.xml
new file mode 100644
index 0000000..d3ac388
--- /dev/null
+++ b/test/schematron/zvon1_0.xml
@@ -0,0 +1,3 @@
+<AAA>
+ <BBB/>
+</AAA>
diff --git a/test/schematron/zvon1_1.xml b/test/schematron/zvon1_1.xml
new file mode 100644
index 0000000..861c90a
--- /dev/null
+++ b/test/schematron/zvon1_1.xml
@@ -0,0 +1,3 @@
+<AAA>
+ <CCC/>
+</AAA>
diff --git a/test/schematron/zvon2.sct b/test/schematron/zvon2.sct
new file mode 100644
index 0000000..56974a0
--- /dev/null
+++ b/test/schematron/zvon2.sct
@@ -0,0 +1,9 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Character @ forbidden">
+ <rule context="*">
+ <report test="contains(.,'@')">Text in element
+ <name/> must not contain character @
+ </report>
+ </rule>
+ </pattern>
+</schema>
diff --git a/test/schematron/zvon2_0.xml b/test/schematron/zvon2_0.xml
new file mode 100644
index 0000000..832c507
--- /dev/null
+++ b/test/schematron/zvon2_0.xml
@@ -0,0 +1,4 @@
+<AAA>
+ <BBB>bbbb</BBB>
+ <CCC>cccc</CCC>
+</AAA>
diff --git a/test/schematron/zvon2_1.xml b/test/schematron/zvon2_1.xml
new file mode 100644
index 0000000..6ade195
--- /dev/null
+++ b/test/schematron/zvon2_1.xml
@@ -0,0 +1,4 @@
+<AAA>
+ <BBB>bbbb@bbb.com</BBB>
+ <CCC>ccc@ccc.com</CCC>
+</AAA>
diff --git a/test/schematron/zvon2_2.xml b/test/schematron/zvon2_2.xml
new file mode 100644
index 0000000..812d44a
--- /dev/null
+++ b/test/schematron/zvon2_2.xml
@@ -0,0 +1,5 @@
+<AAA>
+ <BBB>bbbb</BBB>
+ <CCC>cccc</CCC>
+ aaa@aaa.net
+</AAA>
diff --git a/test/schematron/zvon3.sct b/test/schematron/zvon3.sct
new file mode 100644
index 0000000..f75b67b
--- /dev/null
+++ b/test/schematron/zvon3.sct
@@ -0,0 +1,8 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Attribute test">
+ <rule context="CCC">
+ <assert test="@name">attribute name is not present</assert>
+ <report test="@name">attribute name is present</report>
+ </rule>
+ </pattern>
+</schema>
diff --git a/test/schematron/zvon3_0.xml b/test/schematron/zvon3_0.xml
new file mode 100644
index 0000000..ec8dc43
--- /dev/null
+++ b/test/schematron/zvon3_0.xml
@@ -0,0 +1,8 @@
+<AAA>
+ <BBB>
+ <CCC/>
+ <CCC/>
+ </BBB>
+ <CCC name="c1"/>
+ <CCC name="c2"/>
+</AAA>
diff --git a/test/schematron/zvon4.sct b/test/schematron/zvon4.sct
new file mode 100644
index 0000000..0b8a4e1
--- /dev/null
+++ b/test/schematron/zvon4.sct
@@ -0,0 +1,10 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Root test">
+ <rule context="/*">
+ <assert test="name()='AAA'">Root element is
+ <name/>, not AAA
+ </assert>
+ <report test="name()='AAA'">Root element is AAA</report>
+ </rule>
+ </pattern>
+</schema>
diff --git a/test/schematron/zvon4_0.xml b/test/schematron/zvon4_0.xml
new file mode 100644
index 0000000..4ba332e
--- /dev/null
+++ b/test/schematron/zvon4_0.xml
@@ -0,0 +1,6 @@
+<AAA>
+ <BBB>
+ <CCC/>
+ <CCC/>
+ </BBB>
+</AAA>
diff --git a/test/schematron/zvon4_1.xml b/test/schematron/zvon4_1.xml
new file mode 100644
index 0000000..5becbcf
--- /dev/null
+++ b/test/schematron/zvon4_1.xml
@@ -0,0 +1,6 @@
+<XXX>
+ <BBB>
+ <CCC/>
+ <CCC/>
+ </BBB>
+</XXX>
diff --git a/test/schematron/zvon5.sct b/test/schematron/zvon5.sct
new file mode 100644
index 0000000..36cb8bb
--- /dev/null
+++ b/test/schematron/zvon5.sct
@@ -0,0 +1,12 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Select empty elements CCC">
+ <rule context="CCC">
+ <assert test="normalize-space(.) and *">Source contains an empty element CCC </assert>
+ <report test="normalize-space(.) = ''">[1]An element CCC does not contain any text</report>
+ <assert test="normalize-space(.)">[2]An element CCC does not contain any text</assert>
+ <report test="not(*)">[1]An element CCC does not contain any child element</report>
+ <assert test="*">[2]An element CCC does not contain any child element</assert>
+ </rule>
+ </pattern>
+</schema>
+
diff --git a/test/schematron/zvon5_0.xml b/test/schematron/zvon5_0.xml
new file mode 100644
index 0000000..dc7c36b
--- /dev/null
+++ b/test/schematron/zvon5_0.xml
@@ -0,0 +1,5 @@
+<AAA>
+ <BBB>
+ <CCC/>
+ </BBB>
+</AAA>
diff --git a/test/schematron/zvon5_1.xml b/test/schematron/zvon5_1.xml
new file mode 100644
index 0000000..6915fa6
--- /dev/null
+++ b/test/schematron/zvon5_1.xml
@@ -0,0 +1,5 @@
+<AAA>
+ <BBB>
+ <CCC>I am CCC element</CCC>
+ </BBB>
+</AAA>
diff --git a/test/schematron/zvon5_2.xml b/test/schematron/zvon5_2.xml
new file mode 100644
index 0000000..2a11400
--- /dev/null
+++ b/test/schematron/zvon5_2.xml
@@ -0,0 +1,7 @@
+<AAA>
+ <BBB>
+ <CCC>
+ <DDD/>
+ </CCC>
+ </BBB>
+</AAA>
diff --git a/test/schematron/zvon6.sct b/test/schematron/zvon6.sct
new file mode 100644
index 0000000..678ae58
--- /dev/null
+++ b/test/schematron/zvon6.sct
@@ -0,0 +1,8 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Predefined values">
+ <rule context="AAA">
+ <report test="normalize-space(.) = 'aaa' or normalize-space(.) = 'bbb'">O.K.</report>
+ <assert test="normalize-space(.) = 'aaa' or normalize-space(.) = 'bbb'">The AAA value is not permitted.</assert>
+ </rule>
+ </pattern>
+</schema>
diff --git a/test/schematron/zvon6_0.xml b/test/schematron/zvon6_0.xml
new file mode 100644
index 0000000..a3efb70
--- /dev/null
+++ b/test/schematron/zvon6_0.xml
@@ -0,0 +1,3 @@
+<AAA>
+aaa
+</AAA>
diff --git a/test/schematron/zvon6_1.xml b/test/schematron/zvon6_1.xml
new file mode 100644
index 0000000..7d7daf8
--- /dev/null
+++ b/test/schematron/zvon6_1.xml
@@ -0,0 +1,3 @@
+<AAA>
+ bbb
+</AAA>
diff --git a/test/schematron/zvon6_2.xml b/test/schematron/zvon6_2.xml
new file mode 100644
index 0000000..555f24d
--- /dev/null
+++ b/test/schematron/zvon6_2.xml
@@ -0,0 +1,3 @@
+<AAA>
+ ccc
+</AAA>
diff --git a/test/schematron/zvon7.sct b/test/schematron/zvon7.sct
new file mode 100644
index 0000000..a22a89e
--- /dev/null
+++ b/test/schematron/zvon7.sct
@@ -0,0 +1,9 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Test integer">
+ <rule context="AAA">
+ <report test="floor(.) = number(.)">O.K.</report>
+ <assert test="floor(.) = number(.)">The AAA value is not an integer.</assert>
+ </rule>
+ </pattern>
+</schema>
+
diff --git a/test/schematron/zvon7_0.xml b/test/schematron/zvon7_0.xml
new file mode 100644
index 0000000..a3efb70
--- /dev/null
+++ b/test/schematron/zvon7_0.xml
@@ -0,0 +1,3 @@
+<AAA>
+aaa
+</AAA>
diff --git a/test/schematron/zvon7_1.xml b/test/schematron/zvon7_1.xml
new file mode 100644
index 0000000..8da0ae5
--- /dev/null
+++ b/test/schematron/zvon7_1.xml
@@ -0,0 +1,3 @@
+<AAA>
+ 12.234
+</AAA>
diff --git a/test/schematron/zvon7_2.xml b/test/schematron/zvon7_2.xml
new file mode 100644
index 0000000..e27cfe7
--- /dev/null
+++ b/test/schematron/zvon7_2.xml
@@ -0,0 +1,3 @@
+<AAA>
+45
+</AAA>
diff --git a/test/schematron/zvon7_3.xml b/test/schematron/zvon7_3.xml
new file mode 100644
index 0000000..c17295a
--- /dev/null
+++ b/test/schematron/zvon7_3.xml
@@ -0,0 +1,3 @@
+<AAA>
+0
+</AAA>
diff --git a/test/schematron/zvon7_4.xml b/test/schematron/zvon7_4.xml
new file mode 100644
index 0000000..4f34fbe
--- /dev/null
+++ b/test/schematron/zvon7_4.xml
@@ -0,0 +1,3 @@
+<AAA>
+-45
+</AAA>
diff --git a/test/schematron/zvon8.sct b/test/schematron/zvon8.sct
new file mode 100644
index 0000000..5641ecd
--- /dev/null
+++ b/test/schematron/zvon8.sct
@@ -0,0 +1,10 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Test count">
+ <rule context="/*">
+ <report test="count(//BBB) = count(//AAA)">O.K.</report>
+ <assert test="count(//BBB) &lt;= count(//AAA)">Some AAA are missing</assert>
+ <report test="count(//BBB) &lt; count(//AAA)">Some BBB are missing</report>
+ </rule>
+ </pattern>
+</schema>
+
diff --git a/test/schematron/zvon8_0.xml b/test/schematron/zvon8_0.xml
new file mode 100644
index 0000000..b6739bb
--- /dev/null
+++ b/test/schematron/zvon8_0.xml
@@ -0,0 +1,8 @@
+<XXX>
+ <BBB/>
+ <BBB/>
+ <AAA/>
+ <BBB/>
+ <AAA/>
+ <AAA/>
+</XXX>
diff --git a/test/schematron/zvon8_1.xml b/test/schematron/zvon8_1.xml
new file mode 100644
index 0000000..196dbe2
--- /dev/null
+++ b/test/schematron/zvon8_1.xml
@@ -0,0 +1,7 @@
+<XXX>
+ <BBB/>
+ <AAA/>
+ <BBB/>
+ <AAA/>
+ <AAA/>
+</XXX>
diff --git a/test/schematron/zvon8_2.xml b/test/schematron/zvon8_2.xml
new file mode 100644
index 0000000..f85de82
--- /dev/null
+++ b/test/schematron/zvon8_2.xml
@@ -0,0 +1,7 @@
+<XXX>
+ <BBB/>
+ <BBB/>
+ <AAA/>
+ <BBB/>
+ <AAA/>
+</XXX>
diff --git a/test/schematron/zvon9.sct b/test/schematron/zvon9.sct
new file mode 100644
index 0000000..6f67877
--- /dev/null
+++ b/test/schematron/zvon9.sct
@@ -0,0 +1,9 @@
+<schema xmlns="http://www.ascc.net/xml/schematron" >
+ <pattern name="Test attribute">
+ <rule context="CCC">
+ <report test="parent::BBB and not(@id)">Attribute id is missing</report>
+ <report test="not(parent::BBB) and @id">Attribute id is used in wrong context</report>
+ </rule>
+ </pattern>
+</schema>
+
diff --git a/test/schematron/zvon9_0.xml b/test/schematron/zvon9_0.xml
new file mode 100644
index 0000000..d871519
--- /dev/null
+++ b/test/schematron/zvon9_0.xml
@@ -0,0 +1,7 @@
+<AAA>
+ <CCC/>
+ <CCC/>
+ <BBB>
+ <CCC id="Q1"/>
+ </BBB>
+</AAA>
diff --git a/test/schematron/zvon9_1.xml b/test/schematron/zvon9_1.xml
new file mode 100644
index 0000000..5c1c1bf
--- /dev/null
+++ b/test/schematron/zvon9_1.xml
@@ -0,0 +1,7 @@
+<AAA>
+ <CCC id="Q2"/>
+ <CCC/>
+ <BBB>
+ <CCC id="Q1"/>
+ </BBB>
+</AAA>
diff --git a/test/schematron/zvon9_2.xml b/test/schematron/zvon9_2.xml
new file mode 100644
index 0000000..7e09fab
--- /dev/null
+++ b/test/schematron/zvon9_2.xml
@@ -0,0 +1,7 @@
+<AAA>
+ <CCC/>
+ <CCC/>
+ <BBB>
+ <CCC/>
+ </BBB>
+</AAA>
diff --git a/test/valid/dtds/objednavka.dtd b/test/valid/dtds/objednavka.dtd
new file mode 100644
index 0000000..ac63df1
--- /dev/null
+++ b/test/valid/dtds/objednavka.dtd
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!ELEMENT objednavka (AdDoručeni, AdÚčtovací, ZpůsobDopravy, ZpůsobPlatby, DatumPřijetí, DatumDoručení, ObsahObjednávky, Komentář?)>
+<!ELEMENT AdDoručeni (Jméno, Ulice, Město, PSČ)>
+<!ELEMENT AdÚčtovací (Jméno, Ulice, Město, PSČ)>
+<!ELEMENT Jméno (#PCDATA)>
+<!ELEMENT Ulice (#PCDATA)>
+<!ELEMENT Město (#PCDATA)>
+<!ELEMENT PSÄŚ (#PCDATA)>
+<!ELEMENT ZpĹŻsobDopravy (#PCDATA) >
+<!ELEMENT ZpĹŻsobPlatby (#PCDATA) >
+<!ELEMENT DatumPřijetí (#PCDATA)>
+<!ELEMENT DatumDoruÄŤenĂ­ (#PCDATA)>
+<!ELEMENT ObsahObjednávky (Zboží+) >
+<!ELEMENT Zboží (Kód, Název, Počet, Cena, Popis?) >
+<!ELEMENT KĂłd (#PCDATA)>
+<!ELEMENT Název (#PCDATA) >
+<!ELEMENT PoÄŤet (#PCDATA)>
+<!ELEMENT Cena (#PCDATA) >
+<!ELEMENT Popis (#PCDATA) >
+<!ELEMENT Komentář (Ĺádka*) >
+<!ELEMENT Ĺádka (#PCDATA)>
+<!ATTLIST PoÄŤet
+ jednotka (ks | kg | m2 | m) #IMPLIED>
diff --git a/test/valid/objednavka.xml b/test/valid/objednavka.xml
new file mode 100644
index 0000000..c785b1a
--- /dev/null
+++ b/test/valid/objednavka.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE objednavka SYSTEM "dtds/objednavka.dtd">
+<objednavka>
+ <AdDoruÄŤeni>
+ <Jméno>Jan Novák</Jméno>
+ <Ulice>Bělehradská 147</Ulice>
+ <Město>Praha 2</Město>
+ <PSÄŚ>12000</PSÄŚ>
+ </AdDoruÄŤeni>
+ <AdÚčtovací>
+ <Jméno>Petra Nováková</Jméno>
+ <Ulice>Anglická 15</Ulice>
+ <Město>Praha 2</Město>
+ <PSÄŚ>12000</PSÄŚ>
+ </AdÚčtovací>
+ <ZpĹŻsobDopravy>DPD</ZpĹŻsobDopravy>
+ <ZpĹŻsobPlatby>dobĂ­rka</ZpĹŻsobPlatby>
+ <DatumPřijetí>2004-11-14</DatumPřijetí>
+ <DatumDoruÄŤenĂ­>2004-11-19</DatumDoruÄŤenĂ­>
+ <ObsahObjednávky>
+ <Zboží>
+ <KĂłd>2N7-516</KĂłd>
+ <Název>Sekačka na trávu</Název>
+ <PoÄŤet jednotka="ks">1</PoÄŤet>
+ <Cena>2999</Cena>
+ <Popis>http://example.org/sekacka.html</Popis>
+ </Zboží>
+ <Zboží>
+ <KĂłd>Q3Y-116</KĂłd>
+ <Název>Travní semeno</Název>
+ <PoÄŤet jednotka="kg">2.5</PoÄŤet>
+ <Cena>127.50</Cena>
+ </Zboží>
+ </ObsahObjednávky>
+ <Komentář>
+ <Ĺádka>O dodávku mám zájem pouze v případÄ›, Ĺľe se jedná o trávu v odrĹŻdÄ› konopĂ­.</Ĺádka>
+ <Ĺádka>Dále jsem se chtÄ›l zeptat, zda je doprava zdarma.</Ĺádka>
+ </Komentář>
+</objednavka>
diff --git a/testC14N.c b/testC14N.c
index 6a36a68..674fc71 100644
--- a/testC14N.c
+++ b/testC14N.c
@@ -63,7 +63,7 @@ test_c14n(const char* xml_filename, int with_comments, int exclusive,
xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
xmlSubstituteEntitiesDefault(1);
- doc = xmlParseFile(xml_filename);
+ doc = xmlReadFile(xml_filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT);
if (doc == NULL) {
fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_filename);
return(-1);
@@ -237,7 +237,7 @@ load_xpath_expr (xmlDocPtr parent_doc, const char* filename) {
xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
xmlSubstituteEntitiesDefault(1);
- doc = xmlParseFile(filename);
+ doc = xmlReadFile(filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT);
if (doc == NULL) {
fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename);
return(NULL);
diff --git a/testHTML.c b/testHTML.c
index c5da07e..f350342 100644
--- a/testHTML.c
+++ b/testHTML.c
@@ -50,7 +50,7 @@ static int push = 0;
static char *encoding = NULL;
static int options = 0;
-xmlSAXHandler emptySAXHandlerStruct = {
+static xmlSAXHandler emptySAXHandlerStruct = {
NULL, /* internalSubset */
NULL, /* isStandalone */
NULL, /* hasInternalSubset */
@@ -85,7 +85,7 @@ xmlSAXHandler emptySAXHandlerStruct = {
NULL /* xmlStructuredErrorFunc */
};
-xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
+static xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
extern xmlSAXHandlerPtr debugSAXHandler;
/************************************************************************
@@ -523,7 +523,7 @@ commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
* Display and format a warning messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
{
va_list args;
@@ -543,7 +543,7 @@ warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
* Display and format a error messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
{
va_list args;
@@ -563,7 +563,7 @@ errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
* Display and format a fatalError messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
{
va_list args;
@@ -574,7 +574,7 @@ fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
va_end(args);
}
-xmlSAXHandler debugSAXHandlerStruct = {
+static xmlSAXHandler debugSAXHandlerStruct = {
internalSubsetDebug,
isStandaloneDebug,
hasInternalSubsetDebug,
diff --git a/testReader.c b/testReader.c
index 4d5711b..8f8e26d 100644
--- a/testReader.c
+++ b/testReader.c
@@ -34,12 +34,12 @@
#include <libxml/xmlreader.h>
-int debug = 0;
-int dump = 0;
-int noent = 0;
-int count = 0;
-int valid = 0;
-int consumed = 0;
+static int debug = 0;
+static int dump = 0;
+static int noent = 0;
+static int count = 0;
+static int valid = 0;
+static int consumed = 0;
static void usage(const char *progname) {
printf("Usage : %s [options] XMLfiles ...\n", progname);
diff --git a/testRegexp.c b/testRegexp.c
index 7f34414..ff9c0fc 100644
--- a/testRegexp.c
+++ b/testRegexp.c
@@ -12,8 +12,8 @@
#include <libxml/tree.h>
#include <libxml/xmlregexp.h>
-int repeat = 0;
-int debug = 0;
+static int repeat = 0;
+static int debug = 0;
static void testRegexp(xmlRegexpPtr comp, const char *value) {
int ret;
@@ -85,13 +85,194 @@ testRegexpFile(const char *filename) {
xmlRegFreeRegexp(comp);
}
+#ifdef LIBXML_EXPR_ENABLED
+static void
+runFileTest(xmlExpCtxtPtr ctxt, const char *filename) {
+ xmlExpNodePtr expr = NULL, sub;
+ FILE *input;
+ char expression[5000];
+ int len;
+
+ input = fopen(filename, "r");
+ if (input == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Cannot open %s for reading\n", filename);
+ return;
+ }
+ while (fgets(expression, 4500, input) != NULL) {
+ len = strlen(expression);
+ len--;
+ while ((len >= 0) &&
+ ((expression[len] == '\n') || (expression[len] == '\t') ||
+ (expression[len] == '\r') || (expression[len] == ' '))) len--;
+ expression[len + 1] = 0;
+ if (len >= 0) {
+ if (expression[0] == '#')
+ continue;
+ if ((expression[0] == '=') && (expression[1] == '>')) {
+ char *str = &expression[2];
+
+ if (expr != NULL) {
+ xmlExpFree(ctxt, expr);
+ if (xmlExpCtxtNbNodes(ctxt) != 0)
+ printf(" Parse/free of Expression leaked %d\n",
+ xmlExpCtxtNbNodes(ctxt));
+ expr = NULL;
+ }
+ printf("Expression: %s\n", str) ;
+ expr = xmlExpParse(ctxt, str);
+ if (expr == NULL) {
+ printf(" parsing Failed\n");
+ break;
+ }
+ } else if (expr != NULL) {
+ int expect = -1;
+ int nodes1, nodes2;
+
+ if (expression[0] == '0')
+ expect = 0;
+ if (expression[0] == '1')
+ expect = 1;
+ printf("Subexp: %s", expression + 2) ;
+ nodes1 = xmlExpCtxtNbNodes(ctxt);
+ sub = xmlExpParse(ctxt, expression + 2);
+ if (sub == NULL) {
+ printf(" parsing Failed\n");
+ break;
+ } else {
+ int ret;
+
+ nodes2 = xmlExpCtxtNbNodes(ctxt);
+ ret = xmlExpSubsume(ctxt, expr, sub);
+
+ if ((expect == 1) && (ret == 1)) {
+ printf(" => accept, Ok\n");
+ } else if ((expect == 0) && (ret == 0)) {
+ printf(" => reject, Ok\n");
+ } else if ((expect == 1) && (ret == 0)) {
+ printf(" => reject, Failed\n");
+ } else if ((expect == 0) && (ret == 1)) {
+ printf(" => accept, Failed\n");
+ } else {
+ printf(" => fail internally\n");
+ }
+ if (xmlExpCtxtNbNodes(ctxt) > nodes2) {
+ printf(" Subsume leaked %d\n",
+ xmlExpCtxtNbNodes(ctxt) - nodes2);
+ nodes1 += xmlExpCtxtNbNodes(ctxt) - nodes2;
+ }
+ xmlExpFree(ctxt, sub);
+ if (xmlExpCtxtNbNodes(ctxt) > nodes1) {
+ printf(" Parse/free leaked %d\n",
+ xmlExpCtxtNbNodes(ctxt) - nodes1);
+ }
+ }
+
+ }
+ }
+ }
+ if (expr != NULL) {
+ xmlExpFree(ctxt, expr);
+ if (xmlExpCtxtNbNodes(ctxt) != 0)
+ printf(" Parse/free of Expression leaked %d\n",
+ xmlExpCtxtNbNodes(ctxt));
+ }
+ fclose(input);
+}
+
+static void
+testReduce(xmlExpCtxtPtr ctxt, xmlExpNodePtr expr, const char *tst) {
+ xmlBufferPtr xmlExpBuf;
+ xmlExpNodePtr sub, deriv;
+ xmlExpBuf = xmlBufferCreate();
+
+ sub = xmlExpParse(ctxt, tst);
+ if (sub == NULL) {
+ printf("Subset %s failed to parse\n", tst);
+ return;
+ }
+ xmlExpDump(xmlExpBuf, sub);
+ printf("Subset parsed as: %s\n",
+ (const char *) xmlBufferContent(xmlExpBuf));
+ deriv = xmlExpExpDerive(ctxt, expr, sub);
+ if (deriv == NULL) {
+ printf("Derivation led to an internal error, report this !\n");
+ return;
+ } else {
+ xmlBufferEmpty(xmlExpBuf);
+ xmlExpDump(xmlExpBuf, deriv);
+ if (xmlExpIsNillable(deriv))
+ printf("Resulting nillable derivation: %s\n",
+ (const char *) xmlBufferContent(xmlExpBuf));
+ else
+ printf("Resulting derivation: %s\n",
+ (const char *) xmlBufferContent(xmlExpBuf));
+ xmlExpFree(ctxt, deriv);
+ }
+ xmlExpFree(ctxt, sub);
+}
+
+static void
+exprDebug(xmlExpCtxtPtr ctxt, xmlExpNodePtr expr) {
+ xmlBufferPtr xmlExpBuf;
+ xmlExpNodePtr deriv;
+ const char *list[40];
+ int ret;
+
+ xmlExpBuf = xmlBufferCreate();
+
+ if (expr == NULL) {
+ printf("Failed to parse\n");
+ return;
+ }
+ xmlExpDump(xmlExpBuf, expr);
+ printf("Parsed as: %s\n", (const char *) xmlBufferContent(xmlExpBuf));
+ printf("Max token input = %d\n", xmlExpMaxToken(expr));
+ if (xmlExpIsNillable(expr) == 1)
+ printf("Is nillable\n");
+ ret = xmlExpGetLanguage(ctxt, expr, (const xmlChar **) &list[0], 40);
+ if (ret < 0)
+ printf("Failed to get list: %d\n", ret);
+ else {
+ int i;
+
+ printf("Language has %d strings, testing string derivations\n", ret);
+ for (i = 0;i < ret;i++) {
+ deriv = xmlExpStringDerive(ctxt, expr, BAD_CAST list[i], -1);
+ if (deriv == NULL) {
+ printf(" %s -> derivation failed\n", list[i]);
+ } else {
+ xmlBufferEmpty(xmlExpBuf);
+ xmlExpDump(xmlExpBuf, deriv);
+ printf(" %s -> %s\n", list[i],
+ (const char *) xmlBufferContent(xmlExpBuf));
+ }
+ xmlExpFree(ctxt, deriv);
+ }
+ }
+ xmlBufferFree(xmlExpBuf);
+}
+#endif
static void usage(const char *name) {
- fprintf(stderr, "Usage: %s\n", name);
+ fprintf(stderr, "Usage: %s [flags]\n", name);
+ fprintf(stderr, "Testing tool for libxml2 string and pattern regexps\n");
+ fprintf(stderr, " --debug: switch on debugging\n");
+ fprintf(stderr, " --repeat: loop on the operation\n");
+#ifdef LIBXML_EXPR_ENABLED
+ fprintf(stderr, " --expr: test xmlExp and not xmlRegexp\n");
+#endif
+ fprintf(stderr, " --input filename: use the given filename for regexp\n");
+ fprintf(stderr, " --input filename: use the given filename for exp\n");
}
int main(int argc, char **argv) {
xmlRegexpPtr comp = NULL;
+#ifdef LIBXML_EXPR_ENABLED
+ xmlExpNodePtr expr = NULL;
+ int use_exp = 0;
+ xmlExpCtxtPtr ctxt = NULL;
+#endif
const char *pattern = NULL;
char *filename = NULL;
int i;
@@ -113,39 +294,88 @@ int main(int argc, char **argv) {
} else if ((!strcmp(argv[i], "-repeat")) ||
(!strcmp(argv[i], "--repeat"))) {
repeat++;
- } else if ((!strcmp(argv[i], "-i")) || (!strcmp(argv[i], "--input")))
+#ifdef LIBXML_EXPR_ENABLED
+ } else if ((!strcmp(argv[i], "-expr")) ||
+ (!strcmp(argv[i], "--expr"))) {
+ use_exp++;
+#endif
+ } else if ((!strcmp(argv[i], "-i")) || (!strcmp(argv[i], "-f")) ||
+ (!strcmp(argv[i], "--input")))
filename = argv[++i];
else {
fprintf(stderr, "Unknown option %s\n", argv[i]);
usage(argv[0]);
}
}
+
+#ifdef LIBXML_EXPR_ENABLED
+ if (use_exp)
+ ctxt = xmlExpNewCtxt(0, NULL);
+#endif
+
if (filename != NULL) {
- testRegexpFile(filename);
+#ifdef LIBXML_EXPR_ENABLED
+ if (use_exp)
+ runFileTest(ctxt, filename);
+ else
+#endif
+ testRegexpFile(filename);
} else {
- for (i = 1; i < argc ; i++) {
- if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0)) {
- if (pattern == NULL) {
- pattern = argv[i];
- printf("Testing %s:\n", pattern);
- comp = xmlRegexpCompile((const xmlChar *) pattern);
- if (comp == NULL) {
- printf(" failed to compile\n");
- break;
+#ifdef LIBXML_EXPR_ENABLED
+ if (use_exp) {
+ for (i = 1; i < argc ; i++) {
+ if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0)) {
+ if (pattern == NULL) {
+ pattern = argv[i];
+ printf("Testing expr %s:\n", pattern);
+ expr = xmlExpParse(ctxt, pattern);
+ if (expr == NULL) {
+ printf(" failed to compile\n");
+ break;
+ }
+ if (debug) {
+ exprDebug(ctxt, expr);
+ }
+ } else {
+ testReduce(ctxt, expr, argv[i]);
}
- if (debug)
- xmlRegexpPrint(stdout, comp);
- } else {
- testRegexp(comp, argv[i]);
}
}
- }
- xmlMemoryDump();
- if (comp != NULL)
- xmlRegFreeRegexp(comp);
+ if (expr != NULL)
+ xmlExpFree(ctxt, expr);
+ } else
+#endif
+ {
+ for (i = 1; i < argc ; i++) {
+ if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0)) {
+ if (pattern == NULL) {
+ pattern = argv[i];
+ printf("Testing %s:\n", pattern);
+ comp = xmlRegexpCompile((const xmlChar *) pattern);
+ if (comp == NULL) {
+ printf(" failed to compile\n");
+ break;
+ }
+ if (debug)
+ xmlRegexpPrint(stdout, comp);
+ } else {
+ testRegexp(comp, argv[i]);
+ }
+ }
+ }
+ if (comp != NULL)
+ xmlRegFreeRegexp(comp);
+ }
+ }
+#ifdef LIBXML_EXPR_ENABLED
+ if (ctxt != NULL) {
+ printf("Ops: %d nodes, %d cons\n",
+ xmlExpCtxtNbNodes(ctxt), xmlExpCtxtNbCons(ctxt));
+ xmlExpFreeCtxt(ctxt);
}
+#endif
xmlCleanupParser();
- /* xmlMemoryDump(); */
+ xmlMemoryDump();
return(0);
}
diff --git a/testSAX.c b/testSAX.c
index 36fb12d..cd16268 100644
--- a/testSAX.c
+++ b/testSAX.c
@@ -113,7 +113,7 @@ startTimer(void)
* message about the timing performed; format is a printf
* type argument
*/
-static void
+static void XMLCDECL
endTimer(const char *fmt, ...)
{
long msec;
@@ -149,7 +149,7 @@ startTimer(void)
{
begin = clock();
}
-static void
+static void XMLCDECL
endTimer(const char *fmt, ...)
{
long msec;
@@ -178,7 +178,7 @@ startTimer(void)
* Do nothing
*/
}
-static void
+static void XMLCDECL
endTimer(char *format, ...)
{
/*
@@ -200,7 +200,7 @@ endTimer(char *format, ...)
/*
* empty SAX block
*/
-xmlSAXHandler emptySAXHandlerStruct = {
+static xmlSAXHandler emptySAXHandlerStruct = {
NULL, /* internalSubset */
NULL, /* isStandalone */
NULL, /* hasInternalSubset */
@@ -235,7 +235,7 @@ xmlSAXHandler emptySAXHandlerStruct = {
NULL /* xmlStructuredErrorFunc */
};
-xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
+static xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
extern xmlSAXHandlerPtr debugSAXHandler;
/************************************************************************
@@ -773,7 +773,7 @@ commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
* Display and format a warning messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
{
va_list args;
@@ -796,7 +796,7 @@ warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
* Display and format a error messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
{
va_list args;
@@ -819,7 +819,7 @@ errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
* Display and format a fatalError messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
{
va_list args;
@@ -833,7 +833,7 @@ fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
va_end(args);
}
-xmlSAXHandler debugSAXHandlerStruct = {
+static xmlSAXHandler debugSAXHandlerStruct = {
internalSubsetDebug,
isStandaloneDebug,
hasInternalSubsetDebug,
@@ -957,7 +957,7 @@ endElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
fprintf(stdout, ", '%s')\n", (char *) URI);
}
-xmlSAXHandler debugSAX2HandlerStruct = {
+static xmlSAXHandler debugSAX2HandlerStruct = {
internalSubsetDebug,
isStandaloneDebug,
hasInternalSubsetDebug,
@@ -992,7 +992,7 @@ xmlSAXHandler debugSAX2HandlerStruct = {
NULL
};
-xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct;
+static xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct;
/************************************************************************
* *
diff --git a/testThreads.c b/testThreads.c
index 7147182..6405a77 100644
--- a/testThreads.c
+++ b/testThreads.c
@@ -36,8 +36,8 @@ static const char *testfiles[] = {
"test/threads/invalid.xml",
};
-const char *Okay = "OK";
-const char *Failed = "Failed";
+static const char *Okay = "OK";
+static const char *Failed = "Failed";
#ifndef xmlDoValidityCheckingDefaultValue
#error xmlDoValidityCheckingDefaultValue is not a macro
@@ -110,7 +110,7 @@ main(void)
}
for (i = 0; i < num_threads; i++) {
- ret = pthread_create(&tid[i], 0, thread_specific_data,
+ ret = pthread_create(&tid[i], NULL, thread_specific_data,
(void *) testfiles[i]);
if (ret != 0) {
perror("pthread_create");
diff --git a/testXPath.c b/testXPath.c
index 8086a81..677419a 100644
--- a/testXPath.c
+++ b/testXPath.c
@@ -178,9 +178,9 @@ int main(int argc, char **argv) {
}
if (document == NULL) {
if (filename == NULL)
- document = xmlReadDoc(buffer,NULL,NULL,0);
+ document = xmlReadDoc(buffer,NULL,NULL,XML_PARSE_COMPACT);
else
- document = xmlReadFile(filename,NULL,0);
+ document = xmlReadFile(filename,NULL,XML_PARSE_COMPACT);
}
for (i = 1; i < argc ; i++) {
if ((!strcmp(argv[i], "-i")) || (!strcmp(argv[i], "--input"))) {
diff --git a/testapi.c b/testapi.c
index 9e7969b..80338d7 100644
--- a/testapi.c
+++ b/testapi.c
@@ -171,6 +171,7 @@ int main(int argc, char **argv) {
#include <libxml/pattern.h>
#include <libxml/relaxng.h>
#include <libxml/schemasInternals.h>
+#include <libxml/schematron.h>
#include <libxml/tree.h>
#include <libxml/uri.h>
#include <libxml/valid.h>
@@ -1051,23 +1052,20 @@ static xmlElementTypeVal gen_xmlElementTypeVal(int no, int nr ATTRIBUTE_UNUSED)
static void des_xmlElementTypeVal(int no ATTRIBUTE_UNUSED, xmlElementTypeVal val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
}
-static void desret_xmlParserErrors(xmlParserErrors val ATTRIBUTE_UNUSED) {
-}
-
-#ifdef LIBXML_PATTERN_ENABLED
-#define gen_nb_xmlPatternFlags 4
-static xmlPatternFlags gen_xmlPatternFlags(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 1) return(XML_PATTERN_DEFAULT);
- if (no == 2) return(XML_PATTERN_XPATH);
- if (no == 3) return(XML_PATTERN_XSFIELD);
- if (no == 4) return(XML_PATTERN_XSSEL);
+#define gen_nb_xmlFeature 4
+static xmlFeature gen_xmlFeature(int no, int nr ATTRIBUTE_UNUSED) {
+ if (no == 1) return(XML_FEATURE_AUTOMATA);
+ if (no == 2) return(XML_FEATURE_C14N);
+ if (no == 3) return(XML_FEATURE_CATALOG);
+ if (no == 4) return(XML_FEATURE_DEBUG);
return(0);
}
-static void des_xmlPatternFlags(int no ATTRIBUTE_UNUSED, xmlPatternFlags val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+static void des_xmlFeature(int no ATTRIBUTE_UNUSED, xmlFeature val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
}
-#endif
+static void desret_xmlParserErrors(xmlParserErrors val ATTRIBUTE_UNUSED) {
+}
#ifdef LIBXML_SCHEMAS_ENABLED
#define gen_nb_xmlSchemaValType 4
@@ -1121,6 +1119,7 @@ static void des_xmlSchemaWhitespaceValueType(int no ATTRIBUTE_UNUSED, xmlSchemaW
#include <libxml/pattern.h>
#include <libxml/relaxng.h>
#include <libxml/schemasInternals.h>
+#include <libxml/schematron.h>
#include <libxml/tree.h>
#include <libxml/uri.h>
#include <libxml/valid.h>
@@ -1159,6 +1158,7 @@ static int test_parserInternals(void);
static int test_pattern(void);
static int test_relaxng(void);
static int test_schemasInternals(void);
+static int test_schematron(void);
static int test_tree(void);
static int test_uri(void);
static int test_valid(void);
@@ -1211,6 +1211,7 @@ testlibxml2(void)
test_ret += test_pattern();
test_ret += test_relaxng();
test_ret += test_schemasInternals();
+ test_ret += test_schematron();
test_ret += test_tree();
test_ret += test_uri();
test_ret += test_valid();
@@ -3924,7 +3925,7 @@ static int
test_xmlSAX2EndElement(void) {
int test_ret = 0;
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED)
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
#ifdef LIBXML_SAX1_ENABLED
int mem_base;
void * ctx; /* the user data (XML parser context) */
@@ -4889,7 +4890,7 @@ static int
test_xmlSAX2StartElement(void) {
int test_ret = 0;
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED)
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
#ifdef LIBXML_SAX1_ENABLED
int mem_base;
void * ctx; /* the user data (XML parser context) */
@@ -12985,6 +12986,38 @@ test_xmlGetFeaturesList(void) {
static int
+test_xmlHasFeature(void) {
+ int test_ret = 0;
+
+ int mem_base;
+ int ret_val;
+ xmlFeature feature; /* the feature to be examined */
+ int n_feature;
+
+ for (n_feature = 0;n_feature < gen_nb_xmlFeature;n_feature++) {
+ mem_base = xmlMemBlocks();
+ feature = gen_xmlFeature(n_feature, 0);
+
+ ret_val = xmlHasFeature(feature);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlFeature(n_feature, feature, 0);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlHasFeature",
+ xmlMemBlocks() - mem_base);
+ test_ret++;
+ printf(" %d", n_feature);
+ printf("\n");
+ }
+ }
+ function_tests++;
+
+ return(test_ret);
+}
+
+
+static int
test_xmlIOParseDTD(void) {
int test_ret = 0;
@@ -15172,7 +15205,7 @@ static int
test_parser(void) {
int test_ret = 0;
- if (quiet == 0) printf("Testing parser : 60 of 69 functions ...\n");
+ if (quiet == 0) printf("Testing parser : 61 of 70 functions ...\n");
test_ret += test_xmlByteConsumed();
test_ret += test_xmlClearNodeInfoSeq();
test_ret += test_xmlClearParserCtxt();
@@ -15187,6 +15220,7 @@ test_parser(void) {
test_ret += test_xmlGetExternalEntityLoader();
test_ret += test_xmlGetFeature();
test_ret += test_xmlGetFeaturesList();
+ test_ret += test_xmlHasFeature();
test_ret += test_xmlIOParseDTD();
test_ret += test_xmlInitNodeInfoSeq();
test_ret += test_xmlInitParser();
@@ -16710,6 +16744,40 @@ test_xmlPatternMaxDepth(void) {
static int
+test_xmlPatternMinDepth(void) {
+ int test_ret = 0;
+
+#if defined(LIBXML_PATTERN_ENABLED)
+ int mem_base;
+ int ret_val;
+ xmlPatternPtr comp; /* the precompiled pattern */
+ int n_comp;
+
+ for (n_comp = 0;n_comp < gen_nb_xmlPatternPtr;n_comp++) {
+ mem_base = xmlMemBlocks();
+ comp = gen_xmlPatternPtr(n_comp, 0);
+
+ ret_val = xmlPatternMinDepth(comp);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlPatternPtr(n_comp, comp, 0);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlPatternMinDepth",
+ xmlMemBlocks() - mem_base);
+ test_ret++;
+ printf(" %d", n_comp);
+ printf("\n");
+ }
+ }
+ function_tests++;
+#endif
+
+ return(test_ret);
+}
+
+
+static int
test_xmlPatternStreamable(void) {
int test_ret = 0;
@@ -16896,11 +16964,12 @@ static int
test_pattern(void) {
int test_ret = 0;
- if (quiet == 0) printf("Testing pattern : 7 of 12 functions ...\n");
+ if (quiet == 0) printf("Testing pattern : 8 of 13 functions ...\n");
test_ret += test_xmlPatternFromRoot();
test_ret += test_xmlPatternGetStreamCtxt();
test_ret += test_xmlPatternMatch();
test_ret += test_xmlPatternMaxDepth();
+ test_ret += test_xmlPatternMinDepth();
test_ret += test_xmlPatternStreamable();
test_ret += test_xmlPatterncompile();
test_ret += test_xmlStreamPop();
@@ -17337,6 +17406,16 @@ test_xmlRelaxNGSetValidErrors(void) {
static int
+test_xmlRelaxNGSetValidStructuredErrors(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+static int
test_xmlRelaxNGValidateDoc(void) {
int test_ret = 0;
@@ -17613,7 +17692,7 @@ static int
test_relaxng(void) {
int test_ret = 0;
- if (quiet == 0) printf("Testing relaxng : 14 of 22 functions ...\n");
+ if (quiet == 0) printf("Testing relaxng : 14 of 23 functions ...\n");
test_ret += test_xmlRelaxNGDump();
test_ret += test_xmlRelaxNGDumpTree();
test_ret += test_xmlRelaxNGGetParserErrors();
@@ -17626,6 +17705,7 @@ test_relaxng(void) {
test_ret += test_xmlRelaxNGParse();
test_ret += test_xmlRelaxNGSetParserErrors();
test_ret += test_xmlRelaxNGSetValidErrors();
+ test_ret += test_xmlRelaxNGSetValidStructuredErrors();
test_ret += test_xmlRelaxNGValidateDoc();
test_ret += test_xmlRelaxNGValidateFullElement();
test_ret += test_xmlRelaxNGValidatePopElement();
@@ -17649,6 +17729,134 @@ test_schemasInternals(void) {
}
static int
+test_xmlSchematronNewDocParserCtxt(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+static int
+test_xmlSchematronNewMemParserCtxt(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+static int
+test_xmlSchematronNewParserCtxt(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+#define gen_nb_xmlSchematronPtr 1
+static xmlSchematronPtr gen_xmlSchematronPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+ return(NULL);
+}
+static void des_xmlSchematronPtr(int no ATTRIBUTE_UNUSED, xmlSchematronPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+}
+
+static int
+test_xmlSchematronNewValidCtxt(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+#define gen_nb_xmlSchematronParserCtxtPtr 1
+static xmlSchematronParserCtxtPtr gen_xmlSchematronParserCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+ return(NULL);
+}
+static void des_xmlSchematronParserCtxtPtr(int no ATTRIBUTE_UNUSED, xmlSchematronParserCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+}
+
+static int
+test_xmlSchematronParse(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+#define gen_nb_xmlSchematronValidCtxtPtr 1
+static xmlSchematronValidCtxtPtr gen_xmlSchematronValidCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+ return(NULL);
+}
+static void des_xmlSchematronValidCtxtPtr(int no ATTRIBUTE_UNUSED, xmlSchematronValidCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+}
+
+static int
+test_xmlSchematronValidateDoc(void) {
+ int test_ret = 0;
+
+#if defined(LIBXML_SCHEMATRON_ENABLED)
+ int mem_base;
+ int ret_val;
+ xmlSchematronValidCtxtPtr ctxt; /* the schema validation context */
+ int n_ctxt;
+ xmlDocPtr instance; /* the document instace tree */
+ int n_instance;
+
+ for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchematronValidCtxtPtr;n_ctxt++) {
+ for (n_instance = 0;n_instance < gen_nb_xmlDocPtr;n_instance++) {
+ mem_base = xmlMemBlocks();
+ ctxt = gen_xmlSchematronValidCtxtPtr(n_ctxt, 0);
+ instance = gen_xmlDocPtr(n_instance, 1);
+
+ ret_val = xmlSchematronValidateDoc(ctxt, instance);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlSchematronValidCtxtPtr(n_ctxt, ctxt, 0);
+ des_xmlDocPtr(n_instance, instance, 1);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlSchematronValidateDoc",
+ xmlMemBlocks() - mem_base);
+ test_ret++;
+ printf(" %d", n_ctxt);
+ printf(" %d", n_instance);
+ printf("\n");
+ }
+ }
+ }
+ function_tests++;
+#endif
+
+ return(test_ret);
+}
+
+static int
+test_schematron(void) {
+ int test_ret = 0;
+
+ if (quiet == 0) printf("Testing schematron : 1 of 9 functions ...\n");
+ test_ret += test_xmlSchematronNewDocParserCtxt();
+ test_ret += test_xmlSchematronNewMemParserCtxt();
+ test_ret += test_xmlSchematronNewParserCtxt();
+ test_ret += test_xmlSchematronNewValidCtxt();
+ test_ret += test_xmlSchematronParse();
+ test_ret += test_xmlSchematronValidateDoc();
+
+ if (test_ret != 0)
+ printf("Module schematron: %d errors\n", test_ret);
+ return(test_ret);
+}
+
+static int
test_xmlAddChild(void) {
int test_ret = 0;
@@ -23558,6 +23766,16 @@ test_xmlParseURI(void) {
}
+static int
+test_xmlParseURIRaw(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
#define gen_nb_xmlURIPtr 1
static xmlURIPtr gen_xmlURIPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
return(NULL);
@@ -23757,13 +23975,14 @@ static int
test_uri(void) {
int test_ret = 0;
- if (quiet == 0) printf("Testing uri : 9 of 13 functions ...\n");
+ if (quiet == 0) printf("Testing uri : 9 of 14 functions ...\n");
test_ret += test_xmlBuildRelativeURI();
test_ret += test_xmlBuildURI();
test_ret += test_xmlCanonicPath();
test_ret += test_xmlCreateURI();
test_ret += test_xmlNormalizeURIPath();
test_ret += test_xmlParseURI();
+ test_ret += test_xmlParseURIRaw();
test_ret += test_xmlParseURIReference();
test_ret += test_xmlPrintURI();
test_ret += test_xmlSaveUri();
@@ -28226,6 +28445,16 @@ test_xmlAutomataNewEpsilon(void) {
static int
+test_xmlAutomataNewNegTrans(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+static int
test_xmlAutomataNewOnceTrans(void) {
int test_ret = 0;
@@ -28329,7 +28558,7 @@ static int
test_xmlautomata(void) {
int test_ret = 0;
- if (quiet == 0) printf("Testing xmlautomata : 3 of 18 functions ...\n");
+ if (quiet == 0) printf("Testing xmlautomata : 3 of 19 functions ...\n");
test_ret += test_xmlAutomataCompile();
test_ret += test_xmlAutomataGetInitState();
test_ret += test_xmlAutomataIsDeterminist();
@@ -28340,6 +28569,7 @@ test_xmlautomata(void) {
test_ret += test_xmlAutomataNewCounter();
test_ret += test_xmlAutomataNewCounterTrans();
test_ret += test_xmlAutomataNewEpsilon();
+ test_ret += test_xmlAutomataNewNegTrans();
test_ret += test_xmlAutomataNewOnceTrans();
test_ret += test_xmlAutomataNewOnceTrans2();
test_ret += test_xmlAutomataNewState();
@@ -31707,6 +31937,471 @@ test_xmlreader(void) {
}
#ifdef LIBXML_REGEXP_ENABLED
+#define gen_nb_xmlExpCtxtPtr 1
+static xmlExpCtxtPtr gen_xmlExpCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+ return(NULL);
+}
+static void des_xmlExpCtxtPtr(int no ATTRIBUTE_UNUSED, xmlExpCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+}
+#endif
+
+
+static int
+test_xmlExpCtxtNbCons(void) {
+ int test_ret = 0;
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+ int mem_base;
+ int ret_val;
+ xmlExpCtxtPtr ctxt; /* an expression context */
+ int n_ctxt;
+
+ for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) {
+ mem_base = xmlMemBlocks();
+ ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0);
+
+ ret_val = xmlExpCtxtNbCons(ctxt);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlExpCtxtPtr(n_ctxt, ctxt, 0);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlExpCtxtNbCons",
+ xmlMemBlocks() - mem_base);
+ test_ret++;
+ printf(" %d", n_ctxt);
+ printf("\n");
+ }
+ }
+ function_tests++;
+#endif
+
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpCtxtNbNodes(void) {
+ int test_ret = 0;
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+ int mem_base;
+ int ret_val;
+ xmlExpCtxtPtr ctxt; /* an expression context */
+ int n_ctxt;
+
+ for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) {
+ mem_base = xmlMemBlocks();
+ ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0);
+
+ ret_val = xmlExpCtxtNbNodes(ctxt);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlExpCtxtPtr(n_ctxt, ctxt, 0);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlExpCtxtNbNodes",
+ xmlMemBlocks() - mem_base);
+ test_ret++;
+ printf(" %d", n_ctxt);
+ printf("\n");
+ }
+ }
+ function_tests++;
+#endif
+
+ return(test_ret);
+}
+
+#ifdef LIBXML_REGEXP_ENABLED
+
+#define gen_nb_xmlExpNodePtr 1
+static xmlExpNodePtr gen_xmlExpNodePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+ return(NULL);
+}
+static void des_xmlExpNodePtr(int no ATTRIBUTE_UNUSED, xmlExpNodePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+}
+#endif
+
+
+static int
+test_xmlExpDump(void) {
+ int test_ret = 0;
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+ int mem_base;
+ xmlBufferPtr buf; /* a buffer to receive the output */
+ int n_buf;
+ xmlExpNodePtr expr; /* the compiled expression */
+ int n_expr;
+
+ for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
+ for (n_expr = 0;n_expr < gen_nb_xmlExpNodePtr;n_expr++) {
+ mem_base = xmlMemBlocks();
+ buf = gen_xmlBufferPtr(n_buf, 0);
+ expr = gen_xmlExpNodePtr(n_expr, 1);
+
+ xmlExpDump(buf, expr);
+ call_tests++;
+ des_xmlBufferPtr(n_buf, buf, 0);
+ des_xmlExpNodePtr(n_expr, expr, 1);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlExpDump",
+ xmlMemBlocks() - mem_base);
+ test_ret++;
+ printf(" %d", n_buf);
+ printf(" %d", n_expr);
+ printf("\n");
+ }
+ }
+ }
+ function_tests++;
+#endif
+
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpExpDerive(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpGetLanguage(void) {
+ int test_ret = 0;
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+ int mem_base;
+ int ret_val;
+ xmlExpCtxtPtr ctxt; /* the expression context */
+ int n_ctxt;
+ xmlExpNodePtr exp; /* the expression */
+ int n_exp;
+ xmlChar ** list; /* where to store the tokens */
+ int n_list;
+ int len; /* the allocated lenght of @list */
+ int n_len;
+
+ for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) {
+ for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) {
+ for (n_list = 0;n_list < gen_nb_const_xmlChar_ptr_ptr;n_list++) {
+ for (n_len = 0;n_len < gen_nb_int;n_len++) {
+ mem_base = xmlMemBlocks();
+ ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0);
+ exp = gen_xmlExpNodePtr(n_exp, 1);
+ list = gen_const_xmlChar_ptr_ptr(n_list, 2);
+ len = gen_int(n_len, 3);
+
+ ret_val = xmlExpGetLanguage(ctxt, exp, (const xmlChar **)list, len);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlExpCtxtPtr(n_ctxt, ctxt, 0);
+ des_xmlExpNodePtr(n_exp, exp, 1);
+ des_const_xmlChar_ptr_ptr(n_list, (const xmlChar **)list, 2);
+ des_int(n_len, len, 3);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlExpGetLanguage",
+ xmlMemBlocks() - mem_base);
+ test_ret++;
+ printf(" %d", n_ctxt);
+ printf(" %d", n_exp);
+ printf(" %d", n_list);
+ printf(" %d", n_len);
+ printf("\n");
+ }
+ }
+ }
+ }
+ }
+ function_tests++;
+#endif
+
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpGetStart(void) {
+ int test_ret = 0;
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+ int mem_base;
+ int ret_val;
+ xmlExpCtxtPtr ctxt; /* the expression context */
+ int n_ctxt;
+ xmlExpNodePtr exp; /* the expression */
+ int n_exp;
+ xmlChar ** list; /* where to store the tokens */
+ int n_list;
+ int len; /* the allocated lenght of @list */
+ int n_len;
+
+ for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) {
+ for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) {
+ for (n_list = 0;n_list < gen_nb_const_xmlChar_ptr_ptr;n_list++) {
+ for (n_len = 0;n_len < gen_nb_int;n_len++) {
+ mem_base = xmlMemBlocks();
+ ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0);
+ exp = gen_xmlExpNodePtr(n_exp, 1);
+ list = gen_const_xmlChar_ptr_ptr(n_list, 2);
+ len = gen_int(n_len, 3);
+
+ ret_val = xmlExpGetStart(ctxt, exp, (const xmlChar **)list, len);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlExpCtxtPtr(n_ctxt, ctxt, 0);
+ des_xmlExpNodePtr(n_exp, exp, 1);
+ des_const_xmlChar_ptr_ptr(n_list, (const xmlChar **)list, 2);
+ des_int(n_len, len, 3);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlExpGetStart",
+ xmlMemBlocks() - mem_base);
+ test_ret++;
+ printf(" %d", n_ctxt);
+ printf(" %d", n_exp);
+ printf(" %d", n_list);
+ printf(" %d", n_len);
+ printf("\n");
+ }
+ }
+ }
+ }
+ }
+ function_tests++;
+#endif
+
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpIsNillable(void) {
+ int test_ret = 0;
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+ int mem_base;
+ int ret_val;
+ xmlExpNodePtr exp; /* the expression */
+ int n_exp;
+
+ for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) {
+ mem_base = xmlMemBlocks();
+ exp = gen_xmlExpNodePtr(n_exp, 0);
+
+ ret_val = xmlExpIsNillable(exp);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlExpNodePtr(n_exp, exp, 0);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlExpIsNillable",
+ xmlMemBlocks() - mem_base);
+ test_ret++;
+ printf(" %d", n_exp);
+ printf("\n");
+ }
+ }
+ function_tests++;
+#endif
+
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpMaxToken(void) {
+ int test_ret = 0;
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+ int mem_base;
+ int ret_val;
+ xmlExpNodePtr expr; /* a compiled expression */
+ int n_expr;
+
+ for (n_expr = 0;n_expr < gen_nb_xmlExpNodePtr;n_expr++) {
+ mem_base = xmlMemBlocks();
+ expr = gen_xmlExpNodePtr(n_expr, 0);
+
+ ret_val = xmlExpMaxToken(expr);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlExpNodePtr(n_expr, expr, 0);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlExpMaxToken",
+ xmlMemBlocks() - mem_base);
+ test_ret++;
+ printf(" %d", n_expr);
+ printf("\n");
+ }
+ }
+ function_tests++;
+#endif
+
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpNewAtom(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpNewCtxt(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpNewOr(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpNewRange(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpNewSeq(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpParse(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpRef(void) {
+ int test_ret = 0;
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+ int mem_base;
+ xmlExpNodePtr exp; /* the expression */
+ int n_exp;
+
+ for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) {
+ mem_base = xmlMemBlocks();
+ exp = gen_xmlExpNodePtr(n_exp, 0);
+
+ xmlExpRef(exp);
+ call_tests++;
+ des_xmlExpNodePtr(n_exp, exp, 0);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlExpRef",
+ xmlMemBlocks() - mem_base);
+ test_ret++;
+ printf(" %d", n_exp);
+ printf("\n");
+ }
+ }
+ function_tests++;
+#endif
+
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpStringDerive(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+static int
+test_xmlExpSubsume(void) {
+ int test_ret = 0;
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+ int mem_base;
+ int ret_val;
+ xmlExpCtxtPtr ctxt; /* the expressions context */
+ int n_ctxt;
+ xmlExpNodePtr exp; /* the englobing expression */
+ int n_exp;
+ xmlExpNodePtr sub; /* the subexpression */
+ int n_sub;
+
+ for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) {
+ for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) {
+ for (n_sub = 0;n_sub < gen_nb_xmlExpNodePtr;n_sub++) {
+ mem_base = xmlMemBlocks();
+ ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0);
+ exp = gen_xmlExpNodePtr(n_exp, 1);
+ sub = gen_xmlExpNodePtr(n_sub, 2);
+
+ ret_val = xmlExpSubsume(ctxt, exp, sub);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlExpCtxtPtr(n_ctxt, ctxt, 0);
+ des_xmlExpNodePtr(n_exp, exp, 1);
+ des_xmlExpNodePtr(n_sub, sub, 2);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlExpSubsume",
+ xmlMemBlocks() - mem_base);
+ test_ret++;
+ printf(" %d", n_ctxt);
+ printf(" %d", n_exp);
+ printf(" %d", n_sub);
+ printf("\n");
+ }
+ }
+ }
+ }
+ function_tests++;
+#endif
+
+ return(test_ret);
+}
+
+#ifdef LIBXML_REGEXP_ENABLED
+
#define gen_nb_xmlRegExecCtxtPtr 1
static xmlRegExecCtxtPtr gen_xmlRegExecCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
return(NULL);
@@ -32097,7 +32792,24 @@ static int
test_xmlregexp(void) {
int test_ret = 0;
- if (quiet == 0) printf("Testing xmlregexp : 7 of 11 functions ...\n");
+ if (quiet == 0) printf("Testing xmlregexp : 16 of 30 functions ...\n");
+ test_ret += test_xmlExpCtxtNbCons();
+ test_ret += test_xmlExpCtxtNbNodes();
+ test_ret += test_xmlExpDump();
+ test_ret += test_xmlExpExpDerive();
+ test_ret += test_xmlExpGetLanguage();
+ test_ret += test_xmlExpGetStart();
+ test_ret += test_xmlExpIsNillable();
+ test_ret += test_xmlExpMaxToken();
+ test_ret += test_xmlExpNewAtom();
+ test_ret += test_xmlExpNewCtxt();
+ test_ret += test_xmlExpNewOr();
+ test_ret += test_xmlExpNewRange();
+ test_ret += test_xmlExpNewSeq();
+ test_ret += test_xmlExpParse();
+ test_ret += test_xmlExpRef();
+ test_ret += test_xmlExpStringDerive();
+ test_ret += test_xmlExpSubsume();
test_ret += test_xmlRegExecErrInfo();
test_ret += test_xmlRegExecNextValues();
test_ret += test_xmlRegExecPushString();
@@ -32809,6 +33521,16 @@ test_xmlSchemaSetValidOptions(void) {
static int
+test_xmlSchemaSetValidStructuredErrors(void) {
+ int test_ret = 0;
+
+
+ /* missing type support */
+ return(test_ret);
+}
+
+
+static int
test_xmlSchemaValidCtxtGetOptions(void) {
int test_ret = 0;
@@ -33037,7 +33759,7 @@ static int
test_xmlschemas(void) {
int test_ret = 0;
- if (quiet == 0) printf("Testing xmlschemas : 14 of 22 functions ...\n");
+ if (quiet == 0) printf("Testing xmlschemas : 14 of 23 functions ...\n");
test_ret += test_xmlSchemaDump();
test_ret += test_xmlSchemaGetParserErrors();
test_ret += test_xmlSchemaGetValidErrors();
@@ -33052,6 +33774,7 @@ test_xmlschemas(void) {
test_ret += test_xmlSchemaSetParserErrors();
test_ret += test_xmlSchemaSetValidErrors();
test_ret += test_xmlSchemaSetValidOptions();
+ test_ret += test_xmlSchemaSetValidStructuredErrors();
test_ret += test_xmlSchemaValidCtxtGetOptions();
test_ret += test_xmlSchemaValidateDoc();
test_ret += test_xmlSchemaValidateFile();
@@ -49988,6 +50711,7 @@ test_module(const char *module) {
if (!strcmp(module, "pattern")) return(test_pattern());
if (!strcmp(module, "relaxng")) return(test_relaxng());
if (!strcmp(module, "schemasInternals")) return(test_schemasInternals());
+ if (!strcmp(module, "schematron")) return(test_schematron());
if (!strcmp(module, "tree")) return(test_tree());
if (!strcmp(module, "uri")) return(test_uri());
if (!strcmp(module, "valid")) return(test_valid());
diff --git a/threads.c b/threads.c
index 8b42345..90a461a 100644
--- a/threads.c
+++ b/threads.c
@@ -472,7 +472,7 @@ typedef struct _xmlGlobalStateCleanupHelperParams
void *memory;
} xmlGlobalStateCleanupHelperParams;
-static void xmlGlobalStateCleanupHelper (void *p)
+static void XMLCDECL xmlGlobalStateCleanupHelper (void *p)
{
xmlGlobalStateCleanupHelperParams *params = (xmlGlobalStateCleanupHelperParams *) p;
WaitForSingleObject(params->thread, INFINITE);
diff --git a/tree.c b/tree.c
index 4d12746..3031d50 100644
--- a/tree.c
+++ b/tree.c
@@ -297,6 +297,7 @@ xmlSplitQName2(const xmlChar *name, xmlChar **prefix) {
*
* returns 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
*/
const xmlChar *
@@ -1133,8 +1134,10 @@ xmlFreeDoc(xmlDocPtr cur) {
return;
}
#ifdef LIBXML_DEBUG_RUNTIME
+#ifdef LIBXML_DEBUG_ENABLED
xmlDebugCheckDocument(stderr, cur);
#endif
+#endif
if (cur != NULL) dict = cur->dict;
@@ -1721,80 +1724,87 @@ xmlNodeListGetRawString(xmlDocPtr doc, xmlNodePtr list, int inLine)
}
#endif /* LIBXML_TREE_ENABLED */
-static xmlAttrPtr xmlNewPropInternal(xmlNodePtr node, xmlNsPtr ns,
- const xmlChar *name, const xmlChar *value, int eatname) {
+static xmlAttrPtr
+xmlNewPropInternal(xmlNodePtr node, xmlNsPtr ns,
+ const xmlChar * name, const xmlChar * value,
+ int eatname)
+{
xmlAttrPtr cur;
xmlDocPtr doc = NULL;
if ((node != NULL) && (node->type != XML_ELEMENT_NODE)) {
- if (eatname == 1)
- xmlFree((xmlChar *) name);
- return(NULL);
- }
+ if (eatname == 1)
+ xmlFree((xmlChar *) name);
+ return (NULL);
+ }
/*
* Allocate a new property and fill the fields.
*/
cur = (xmlAttrPtr) xmlMalloc(sizeof(xmlAttr));
if (cur == NULL) {
- if (eatname == 1)
- xmlFree((xmlChar *) name);
- xmlTreeErrMemory("building attribute");
- return(NULL);
+ if (eatname == 1)
+ xmlFree((xmlChar *) name);
+ xmlTreeErrMemory("building attribute");
+ return (NULL);
}
memset(cur, 0, sizeof(xmlAttr));
cur->type = XML_ATTRIBUTE_NODE;
- cur->parent = node;
+ cur->parent = node;
if (node != NULL) {
- doc = node->doc;
- cur->doc = doc;
+ doc = node->doc;
+ cur->doc = doc;
}
- cur->ns = ns;
+ cur->ns = ns;
- if (eatname == 0) {
- if ((doc != NULL) && (doc->dict != NULL))
- cur->name = (xmlChar *) xmlDictLookup(doc->dict, name, -1);
- else
- cur->name = xmlStrdup(name);
- } else
- cur->name = name;
+ if (eatname == 0) {
+ if ((doc != NULL) && (doc->dict != NULL))
+ cur->name = (xmlChar *) xmlDictLookup(doc->dict, name, -1);
+ else
+ cur->name = xmlStrdup(name);
+ } else
+ cur->name = name;
if (value != NULL) {
- xmlChar *buffer;
- xmlNodePtr tmp;
-
- buffer = xmlEncodeEntitiesReentrant(doc, value);
- cur->children = xmlStringGetNodeList(doc, buffer);
- cur->last = NULL;
- tmp = cur->children;
- while (tmp != NULL) {
- tmp->parent = (xmlNodePtr) cur;
- if (tmp->next == NULL)
- cur->last = tmp;
- tmp = tmp->next;
- }
- xmlFree(buffer);
- }
+ xmlChar *buffer;
+ xmlNodePtr tmp;
+
+ buffer = xmlEncodeEntitiesReentrant(doc, value);
+ cur->children = xmlStringGetNodeList(doc, buffer);
+ cur->last = NULL;
+ tmp = cur->children;
+ while (tmp != NULL) {
+ tmp->parent = (xmlNodePtr) cur;
+ if (tmp->next == NULL)
+ cur->last = tmp;
+ tmp = tmp->next;
+ }
+ xmlFree(buffer);
+ }
/*
* Add it at the end to preserve parsing order ...
*/
if (node != NULL) {
- if (node->properties == NULL) {
- node->properties = cur;
- } else {
- xmlAttrPtr prev = node->properties;
+ if (node->properties == NULL) {
+ node->properties = cur;
+ } else {
+ xmlAttrPtr prev = node->properties;
- while (prev->next != NULL) prev = prev->next;
- prev->next = cur;
- cur->prev = prev;
- }
+ while (prev->next != NULL)
+ prev = prev->next;
+ prev->next = cur;
+ cur->prev = prev;
+ }
}
+ if (xmlIsID((node == NULL) ? NULL : node->doc, node, cur) == 1)
+ xmlAddID(NULL, node->doc, value, cur);
+
if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
- return(cur);
+ xmlRegisterNodeDefaultValue((xmlNodePtr) cur);
+ return (cur);
}
#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
@@ -3285,7 +3295,8 @@ xmlFreeNodeList(xmlNodePtr cur) {
if ((cur->type != XML_ELEMENT_NODE) &&
(cur->type != XML_XINCLUDE_START) &&
(cur->type != XML_XINCLUDE_END) &&
- (cur->type != XML_ENTITY_REF_NODE)) {
+ (cur->type != XML_ENTITY_REF_NODE) &&
+ (cur->content != (xmlChar *) &(cur->properties))) {
DICT_FREE(cur->content)
}
if (((cur->type == XML_ELEMENT_NODE) ||
@@ -3354,7 +3365,8 @@ xmlFreeNode(xmlNodePtr cur) {
(cur->content != NULL) &&
(cur->type != XML_ENTITY_REF_NODE) &&
(cur->type != XML_XINCLUDE_END) &&
- (cur->type != XML_XINCLUDE_START)) {
+ (cur->type != XML_XINCLUDE_START) &&
+ (cur->content != (xmlChar *) &(cur->properties))) {
DICT_FREE(cur->content)
}
@@ -3809,7 +3821,7 @@ xmlStaticCopyNode(const xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent,
if (!extended)
goto out;
- if (node->nsDef != NULL)
+ if ((node->type == XML_ELEMENT_NODE) && (node->nsDef != NULL))
ret->nsDef = xmlCopyNamespaceList(node->nsDef);
if (node->ns != NULL) {
@@ -3836,7 +3848,7 @@ xmlStaticCopyNode(const xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent,
ret->ns = ns;
}
}
- if (node->properties != NULL)
+ if ((node->type == XML_ELEMENT_NODE) && (node->properties != NULL))
ret->properties = xmlCopyPropList(ret, node->properties);
if (node->type == XML_ENTITY_REF_NODE) {
if ((doc == NULL) || (node->doc != doc)) {
@@ -4136,15 +4148,19 @@ xmlGetLineNo(xmlNodePtr node)
if (!node)
return result;
- if (node->type == XML_ELEMENT_NODE)
+ 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->prev->type == XML_ELEMENT_NODE) ||
- (node->prev->type == XML_TEXT_NODE)))
+ (node->prev->type == XML_TEXT_NODE) ||
+ (node->prev->type == XML_COMMENT_NODE) ||
+ (node->prev->type == XML_PI_NODE)))
result = xmlGetLineNo(node->prev);
else if ((node->parent != NULL) &&
- ((node->parent->type == XML_ELEMENT_NODE) ||
- (node->parent->type == XML_TEXT_NODE)))
+ (node->parent->type == XML_ELEMENT_NODE))
result = xmlGetLineNo(node->parent);
return result;
@@ -4332,6 +4348,16 @@ xmlGetNodePath(xmlNodePtr node)
} else if (cur->type == XML_ATTRIBUTE_NODE) {
sep = "/@";
name = (const char *) (((xmlAttrPtr) cur)->name);
+ if (cur->ns) {
+ if (cur->ns->prefix != NULL)
+ snprintf(nametemp, sizeof(nametemp) - 1, "%s:%s",
+ (char *)cur->ns->prefix, (char *)cur->name);
+ else
+ snprintf(nametemp, sizeof(nametemp) - 1, "%s",
+ (char *)cur->name);
+ nametemp[sizeof(nametemp) - 1] = 0;
+ name = nametemp;
+ }
next = ((xmlAttrPtr) cur)->parent;
} else {
next = cur->parent;
@@ -5090,7 +5116,8 @@ xmlNodeSetContent(xmlNodePtr cur, const xmlChar *content) {
case XML_ENTITY_NODE:
case XML_PI_NODE:
case XML_COMMENT_NODE:
- if (cur->content != NULL) {
+ if ((cur->content != NULL) &&
+ (cur->content != (xmlChar *) &(cur->properties))) {
if (!((cur->doc != NULL) && (cur->doc->dict != NULL) &&
(xmlDictOwns(cur->doc->dict, cur->content))))
xmlFree(cur->content);
@@ -5101,6 +5128,8 @@ xmlNodeSetContent(xmlNodePtr cur, const xmlChar *content) {
cur->content = xmlStrdup(content);
} else
cur->content = NULL;
+ cur->properties = NULL;
+ cur->nsDef = NULL;
break;
case XML_DOCUMENT_NODE:
case XML_HTML_DOCUMENT_NODE:
@@ -5162,8 +5191,11 @@ xmlNodeSetContentLen(xmlNodePtr cur, const xmlChar *content, int len) {
case XML_PI_NODE:
case XML_COMMENT_NODE:
case XML_NOTATION_NODE:
- if (cur->content != NULL) {
- xmlFree(cur->content);
+ if ((cur->content != NULL) &&
+ (cur->content != (xmlChar *) &(cur->properties))) {
+ if (!((cur->doc != NULL) && (cur->doc->dict != NULL) &&
+ (xmlDictOwns(cur->doc->dict, cur->content))))
+ xmlFree(cur->content);
}
if (cur->children != NULL) xmlFreeNodeList(cur->children);
cur->children = cur->last = NULL;
@@ -5171,6 +5203,8 @@ xmlNodeSetContentLen(xmlNodePtr cur, const xmlChar *content, int len) {
cur->content = xmlStrndup(content, len);
} else
cur->content = NULL;
+ cur->properties = NULL;
+ cur->nsDef = NULL;
break;
case XML_DOCUMENT_NODE:
case XML_DTD_NODE:
@@ -5241,10 +5275,12 @@ xmlNodeAddContentLen(xmlNodePtr cur, const xmlChar *content, int len) {
case XML_COMMENT_NODE:
case XML_NOTATION_NODE:
if (content != NULL) {
- if ((cur->doc != NULL) && (cur->doc->dict != NULL) &&
- xmlDictOwns(cur->doc->dict, cur->content)) {
- cur->content =
- xmlStrncatNew(cur->content, content, len);
+ if ((cur->content == (xmlChar *) &(cur->properties)) ||
+ ((cur->doc != NULL) && (cur->doc->dict != NULL) &&
+ xmlDictOwns(cur->doc->dict, cur->content))) {
+ cur->content = xmlStrncatNew(cur->content, content, len);
+ cur->properties = NULL;
+ cur->nsDef = NULL;
break;
}
cur->content = xmlStrncat(cur->content, content, len);
@@ -5887,7 +5923,8 @@ xmlHasProp(xmlNodePtr node, const xmlChar *name) {
xmlAttrPtr prop;
xmlDocPtr doc;
- if ((node == NULL) || (name == NULL)) return(NULL);
+ if ((node == NULL) || (node->type != XML_ELEMENT_NODE) || (name == NULL))
+ return(NULL);
/*
* Check on the properties attached to the node
*/
@@ -5943,7 +5980,7 @@ xmlHasNsProp(xmlNodePtr node, const xmlChar *name, const xmlChar *nameSpace) {
xmlDocPtr doc;
#endif /* LIBXML_TREE_ENABLED */
- if (node == NULL)
+ if ((node == NULL) || (node->type != XML_ELEMENT_NODE) || (name == NULL))
return(NULL);
prop = node->properties;
@@ -6041,7 +6078,9 @@ xmlGetProp(xmlNodePtr node, const xmlChar *name) {
xmlAttrPtr prop;
xmlDocPtr doc;
- if ((node == NULL) || (name == NULL)) return(NULL);
+ if ((node == NULL) || (node->type != XML_ELEMENT_NODE) || (name == NULL))
+ return(NULL);
+
/*
* Check on the properties attached to the node
*/
@@ -6098,7 +6137,8 @@ xmlGetNoNsProp(xmlNodePtr node, const xmlChar *name) {
xmlAttrPtr prop;
xmlDocPtr doc;
- if ((node == NULL) || (name == NULL)) return(NULL);
+ if ((node == NULL) || (node->type != XML_ELEMENT_NODE) || (name == NULL))
+ return(NULL);
/*
* Check on the properties attached to the node
*/
@@ -6156,7 +6196,7 @@ xmlGetNsProp(xmlNodePtr node, const xmlChar *name, const xmlChar *nameSpace) {
xmlDocPtr doc;
xmlNsPtr ns;
- if (node == NULL)
+ if ((node == NULL) || (node->type != XML_ELEMENT_NODE))
return(NULL);
prop = node->properties;
@@ -6220,7 +6260,7 @@ int
xmlUnsetProp(xmlNodePtr node, const xmlChar *name) {
xmlAttrPtr prop, prev = NULL;;
- if ((node == NULL) || (name == NULL))
+ if ((node == NULL) || (node->type != XML_ELEMENT_NODE) || (name == NULL))
return(-1);
prop = node->properties;
while (prop != NULL) {
@@ -6249,7 +6289,7 @@ int
xmlUnsetNsProp(xmlNodePtr node, xmlNsPtr ns, const xmlChar *name) {
xmlAttrPtr prop, prev = NULL;;
- if ((node == NULL) || (name == NULL))
+ if ((node == NULL) || (node->type != XML_ELEMENT_NODE) || (name == NULL))
return(-1);
prop = node->properties;
if (ns == NULL)
@@ -6284,16 +6324,36 @@ xmlAttrPtr
xmlSetProp(xmlNodePtr node, const xmlChar *name, const xmlChar *value) {
xmlAttrPtr prop;
xmlDocPtr doc;
+ int len;
+ const xmlChar *nqname;
if ((node == NULL) || (name == NULL) || (node->type != XML_ELEMENT_NODE))
return(NULL);
+
+ /*
+ * handle QNames
+ */
+ nqname = xmlSplitQName3(name, &len);
+ if (nqname != NULL) {
+ xmlNsPtr ns;
+ xmlChar *prefix = xmlStrndup(name, len);
+ ns = xmlSearchNs(node->doc, node, prefix);
+ if (prefix != NULL)
+ xmlFree(prefix);
+ if (ns != NULL)
+ return(xmlSetNsProp(node, ns, nqname, value));
+ }
+
doc = node->doc;
prop = node->properties;
while (prop != NULL) {
if ((xmlStrEqual(prop->name, name)) &&
(prop->ns == NULL)){
xmlNodePtr oldprop = prop->children;
+ int id = xmlIsID(node->doc, node, prop);
+ if (id == 1)
+ xmlRemoveID(node->doc, prop);
prop->children = NULL;
prop->last = NULL;
if (value != NULL) {
@@ -6316,6 +6376,8 @@ xmlSetProp(xmlNodePtr node, const xmlChar *name, const xmlChar *value) {
}
if (oldprop != NULL)
xmlFreeNodeList(oldprop);
+ if (id)
+ xmlAddID(NULL, node->doc, value, prop);
return(prop);
}
prop = prop->next;
@@ -6358,6 +6420,10 @@ xmlSetNsProp(xmlNodePtr node, xmlNsPtr ns, const xmlChar *name,
*/
if ((xmlStrEqual(prop->name, name)) &&
(prop->ns != NULL) && (xmlStrEqual(prop->ns->href, ns->href))) {
+ int id = xmlIsID(node->doc, node, prop);
+
+ if (id == 1)
+ xmlRemoveID(node->doc, prop);
if (prop->children != NULL)
xmlFreeNodeList(prop->children);
prop->children = NULL;
@@ -6379,6 +6445,8 @@ xmlSetNsProp(xmlNodePtr node, xmlNsPtr ns, const xmlChar *name,
}
xmlFree(buffer);
}
+ if (id)
+ xmlAddID(NULL, node->doc, value, prop);
return(prop);
}
prop = prop->next;
@@ -6455,12 +6523,14 @@ xmlTextConcat(xmlNodePtr node, const xmlChar *content, int len) {
return(-1);
}
/* need to check if content is currently in the dictionary */
- if ((node->doc != NULL) && (node->doc->dict != NULL) &&
- xmlDictOwns(node->doc->dict, node->content)) {
+ if ((node->content == (xmlChar *) &(node->properties)) ||
+ ((node->doc != NULL) && (node->doc->dict != NULL) &&
+ xmlDictOwns(node->doc->dict, node->content))) {
node->content = xmlStrncatNew(node->content, content, len);
} else {
node->content = xmlStrncat(node->content, content, len);
}
+ node->properties = NULL;
if (node->content == NULL)
return(-1);
return(0);
diff --git a/uri.c b/uri.c
index d2fa521..a00415c 100644
--- a/uri.c
+++ b/uri.c
@@ -185,6 +185,8 @@
* path = [ abs_path | opaque_part ]
*/
+#define STRNDUP(s, n) (char *) xmlStrndup((const xmlChar *)(s), (n))
+
/************************************************************************
* *
* Generic URI structure functions *
@@ -1086,7 +1088,10 @@ xmlParseURIFragment(xmlURIPtr uri, const char **str)
if (uri != NULL) {
if (uri->fragment != NULL)
xmlFree(uri->fragment);
- uri->fragment = xmlURIUnescapeString(*str, cur - *str, NULL);
+ if (uri->cleanup & 2)
+ uri->fragment = STRNDUP(*str, cur - *str);
+ else
+ uri->fragment = xmlURIUnescapeString(*str, cur - *str, NULL);
}
*str = cur;
return (0);
@@ -1111,12 +1116,16 @@ xmlParseURIQuery(xmlURIPtr uri, const char **str)
if (str == NULL)
return (-1);
- while (IS_URIC(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))
+ while ((IS_URIC(cur)) ||
+ ((uri != NULL) && (uri->cleanup & 1) && (IS_UNWISE(cur))))
NEXT(cur);
if (uri != NULL) {
if (uri->query != NULL)
xmlFree(uri->query);
- uri->query = xmlURIUnescapeString(*str, cur - *str, NULL);
+ if (uri->cleanup & 2)
+ uri->query = STRNDUP(*str, cur - *str);
+ else
+ uri->query = xmlURIUnescapeString(*str, cur - *str, NULL);
}
*str = cur;
return (0);
@@ -1147,8 +1156,7 @@ xmlParseURIScheme(xmlURIPtr uri, const char **str) {
while (IS_SCHEME(*cur)) cur++;
if (uri != NULL) {
if (uri->scheme != NULL) xmlFree(uri->scheme);
- /* !!! strndup */
- uri->scheme = xmlURIUnescapeString(*str, cur - *str, NULL);
+ uri->scheme = STRNDUP(*str, cur - *str);
}
*str = cur;
return(0);
@@ -1174,16 +1182,21 @@ xmlParseURIOpaquePart(xmlURIPtr uri, const char **str)
return (-1);
cur = *str;
- if (!(IS_URIC_NO_SLASH(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))) {
+ if (!((IS_URIC_NO_SLASH(cur)) ||
+ ((uri != NULL) && (uri->cleanup & 1) && (IS_UNWISE(cur))))) {
return (3);
}
NEXT(cur);
- while (IS_URIC(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))
+ while ((IS_URIC(cur)) ||
+ ((uri != NULL) && (uri->cleanup & 1) && (IS_UNWISE(cur))))
NEXT(cur);
if (uri != NULL) {
if (uri->opaque != NULL)
xmlFree(uri->opaque);
- uri->opaque = xmlURIUnescapeString(*str, cur - *str, NULL);
+ if (uri->cleanup & 2)
+ uri->opaque = STRNDUP(*str, cur - *str);
+ else
+ uri->opaque = xmlURIUnescapeString(*str, cur - *str, NULL);
}
*str = cur;
return (0);
@@ -1235,7 +1248,10 @@ xmlParseURIServer(xmlURIPtr uri, const char **str) {
if (*cur == '@') {
if (uri != NULL) {
if (uri->user != NULL) xmlFree(uri->user);
- uri->user = xmlURIUnescapeString(*str, cur - *str, NULL);
+ if (uri->cleanup & 2)
+ uri->path = STRNDUP(*str, cur - *str);
+ else
+ uri->user = xmlURIUnescapeString(*str, cur - *str, NULL);
}
cur++;
} else {
@@ -1349,7 +1365,10 @@ xmlParseURIServer(xmlURIPtr uri, const char **str) {
uri->authority = NULL;
if (host[0] != '[') { /* it's not an IPV6 addr */
if (uri->server != NULL) xmlFree(uri->server);
- uri->server = xmlURIUnescapeString(host, cur - host, NULL);
+ if (uri->cleanup & 2)
+ uri->server = STRNDUP(host, cur - host);
+ else
+ uri->server = xmlURIUnescapeString(host, cur - host, NULL);
}
}
/*
@@ -1392,16 +1411,21 @@ xmlParseURIRelSegment(xmlURIPtr uri, const char **str)
return (-1);
cur = *str;
- if (!(IS_SEGMENT(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))) {
+ if (!((IS_SEGMENT(cur)) ||
+ ((uri != NULL) && (uri->cleanup & 1) && (IS_UNWISE(cur))))) {
return (3);
}
NEXT(cur);
- while (IS_SEGMENT(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))
+ while ((IS_SEGMENT(cur)) ||
+ ((uri != NULL) && (uri->cleanup & 1) && (IS_UNWISE(cur))))
NEXT(cur);
if (uri != NULL) {
if (uri->path != NULL)
xmlFree(uri->path);
- uri->path = xmlURIUnescapeString(*str, cur - *str, NULL);
+ if (uri->cleanup & 2)
+ uri->path = STRNDUP(*str, cur - *str);
+ else
+ uri->path = xmlURIUnescapeString(*str, cur - *str, NULL);
}
*str = cur;
return (0);
@@ -1432,11 +1456,13 @@ xmlParseURIPathSegments(xmlURIPtr uri, const char **str, int slash)
cur = *str;
do {
- while (IS_PCHAR(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))
+ while ((IS_PCHAR(cur)) ||
+ ((uri != NULL) && (uri->cleanup & 1) && (IS_UNWISE(cur))))
NEXT(cur);
while (*cur == ';') {
cur++;
- while (IS_PCHAR(cur) || ((uri != NULL) && (uri->cleanup) && (IS_UNWISE(cur))))
+ while ((IS_PCHAR(cur)) ||
+ ((uri != NULL) && (uri->cleanup & 1) && (IS_UNWISE(cur))))
NEXT(cur);
}
if (*cur != '/')
@@ -1472,8 +1498,13 @@ xmlParseURIPathSegments(xmlURIPtr uri, const char **str, int slash)
len2++;
}
path[len2] = 0;
- if (cur - *str > 0)
- xmlURIUnescapeString(*str, cur - *str, &path[len2]);
+ if (cur - *str > 0) {
+ if (uri->cleanup & 2) {
+ memcpy(&path[len2], *str, cur - *str);
+ path[len2 + (cur - *str)] = 0;
+ } else
+ xmlURIUnescapeString(*str, cur - *str, &path[len2]);
+ }
if (uri->path != NULL)
xmlFree(uri->path);
uri->path = path;
@@ -1538,7 +1569,10 @@ xmlParseURIAuthority(xmlURIPtr uri, const char **str) {
if (uri->user != NULL) xmlFree(uri->user);
uri->user = NULL;
if (uri->authority != NULL) xmlFree(uri->authority);
- uri->authority = xmlURIUnescapeString(*str, cur - *str, NULL);
+ if (uri->cleanup & 2)
+ uri->authority = STRNDUP(*str, cur - *str);
+ else
+ uri->authority = xmlURIUnescapeString(*str, cur - *str, NULL);
}
*str = cur;
return(0);
@@ -1761,6 +1795,38 @@ xmlParseURI(const char *str) {
return(uri);
}
+/**
+ * xmlParseURIRaw:
+ * @str: the URI string to analyze
+ * @raw: if 1 unescaping of URI pieces are disabled
+ *
+ * Parse an URI but allows to keep intact the original fragments.
+ *
+ * URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
+ *
+ * Returns a newly built xmlURIPtr or NULL in case of error
+ */
+xmlURIPtr
+xmlParseURIRaw(const char *str, int raw) {
+ xmlURIPtr uri;
+ int ret;
+
+ if (str == NULL)
+ return(NULL);
+ uri = xmlCreateURI();
+ if (uri != NULL) {
+ if (raw) {
+ uri->cleanup |= 2;
+ }
+ ret = xmlParseURIReference(uri, str);
+ if (ret) {
+ xmlFreeURI(uri);
+ return(NULL);
+ }
+ }
+ return(uri);
+}
+
/************************************************************************
* *
* Public functions *
@@ -2070,14 +2136,6 @@ xmlBuildRelativeURI (const xmlChar * URI, const xmlChar * base)
if ((URI == NULL) || (*URI == 0))
return NULL;
- /*
- * Special case - if URI starts with '.', we assume it's already
- * in relative form, so nothing to do.
- */
- if (*URI == '.') {
- val = xmlStrdup (URI);
- goto done;
- }
/*
* First parse URI into a standard form
@@ -2085,9 +2143,13 @@ xmlBuildRelativeURI (const xmlChar * URI, const xmlChar * base)
ref = xmlCreateURI ();
if (ref == NULL)
return NULL;
- ret = xmlParseURIReference (ref, (const char *) URI);
- if (ret != 0)
- goto done; /* Error in URI, return NULL */
+ /* If URI not already in "relative" form */
+ if (URI[0] != '.') {
+ ret = xmlParseURIReference (ref, (const char *) URI);
+ if (ret != 0)
+ goto done; /* Error in URI, return NULL */
+ } else
+ ref->path = (char *)xmlStrdup(URI);
/*
* Next parse base into the same standard form
@@ -2099,9 +2161,12 @@ xmlBuildRelativeURI (const xmlChar * URI, const xmlChar * base)
bas = xmlCreateURI ();
if (bas == NULL)
goto done;
- ret = xmlParseURIReference (bas, (const char *) base);
- if (ret != 0)
- goto done; /* Error in base, return NULL */
+ if (base[0] != '.') {
+ ret = xmlParseURIReference (bas, (const char *) base);
+ if (ret != 0)
+ goto done; /* Error in base, return NULL */
+ } else
+ bas->path = (char *)xmlStrdup(base);
/*
* If the scheme / server on the URI differs from the base,
@@ -2230,8 +2295,9 @@ xmlCanonicPath(const xmlChar *path)
int i = 0;
xmlChar *p = NULL;
#endif
- xmlChar *ret;
xmlURIPtr uri;
+ xmlChar *ret;
+ const xmlChar *absuri;
if (path == NULL)
return(NULL);
@@ -2240,12 +2306,47 @@ xmlCanonicPath(const xmlChar *path)
return xmlStrdup(path);
}
+ absuri = xmlStrstr(path, BAD_CAST "://");
+ if (absuri != NULL) {
+ int l, j;
+ unsigned char c;
+ xmlChar *escURI;
+
+ /*
+ * this looks like an URI where some parts have not been
+ * escaped leading to a parsing problem check that the first
+ * part matches a protocol.
+ */
+ l = absuri - path;
+ if ((l <= 0) || (l > 20))
+ goto path_processing;
+ for (j = 0;j < l;j++) {
+ c = path[j];
+ if (!(((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'))))
+ goto path_processing;
+ }
+
+ escURI = xmlURIEscapeStr(path, BAD_CAST ":/?_.#&;=");
+ if (escURI != NULL) {
+ uri = xmlParseURI((const char *) escURI);
+ if (uri != NULL) {
+ xmlFreeURI(uri);
+ return escURI;
+ }
+ xmlFreeURI(uri);
+ }
+ }
+
+path_processing:
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ /*
+ * This really need to be cleaned up by someone with a Windows box
+ */
uri = xmlCreateURI();
if (uri == NULL) {
return(NULL);
}
-#if defined(_WIN32) && !defined(__CYGWIN__)
len = xmlStrlen(path);
if ((len > 2) && IS_WINDOWS_PATH(path)) {
uri->scheme = xmlStrdup(BAD_CAST "file");
@@ -2262,15 +2363,15 @@ xmlCanonicPath(const xmlChar *path)
*p = '/';
p++;
}
-#else
- uri->path = (char *) xmlStrdup((const xmlChar *) path);
-#endif
if (uri->path == NULL) {
xmlFreeURI(uri);
return(NULL);
}
ret = xmlSaveUri(uri);
xmlFreeURI(uri);
+#else
+ ret = xmlStrdup((const xmlChar *) path);
+#endif
return(ret);
}
diff --git a/valid.c b/valid.c
index ed89c6c..3ee5630 100644
--- a/valid.c
+++ b/valid.c
@@ -453,14 +453,14 @@ nodeVPop(xmlValidCtxtPtr ctxt)
xmlNodePtr ret;
if (ctxt->nodeNr <= 0)
- return (0);
+ return (NULL);
ctxt->nodeNr--;
if (ctxt->nodeNr > 0)
ctxt->node = ctxt->nodeTab[ctxt->nodeNr - 1];
else
ctxt->node = NULL;
ret = ctxt->nodeTab[ctxt->nodeNr];
- ctxt->nodeTab[ctxt->nodeNr] = 0;
+ ctxt->nodeTab[ctxt->nodeNr] = NULL;
return (ret);
}
@@ -2703,8 +2703,12 @@ xmlFreeIDTable(xmlIDTablePtr table) {
*/
int
xmlIsID(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) {
+ if ((attr == NULL) || (attr->name == NULL)) return(0);
+ if ((attr->ns != NULL) && (attr->ns->prefix != NULL) &&
+ (!strcmp((char *) attr->name, "id")) &&
+ (!strcmp((char *) attr->ns->prefix, "xml")))
+ return(1);
if (doc == NULL) return(0);
- if (attr == NULL) return(0);
if ((doc->intSubset == NULL) && (doc->extSubset == NULL)) {
return(0);
} else if (doc->type == XML_HTML_DOCUMENT_NODE) {
@@ -2713,32 +2717,35 @@ xmlIsID(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) {
((elem != NULL) && (!xmlStrEqual(elem->name, BAD_CAST "input"))))
return(1);
return(0);
+ } else if (elem == NULL) {
+ return(0);
} else {
- xmlAttributePtr attrDecl;
+ xmlAttributePtr attrDecl = NULL;
- if (elem == NULL) return(0);
- 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);
- attrDecl = xmlGetDtdAttrDesc(doc->intSubset, fullname,
- attr->name);
- if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdAttrDesc(doc->extSubset, fullname,
- attr->name);
- if ((fullname != fn) && (fullname != elem->name))
- xmlFree(fullname);
- } else {
- attrDecl = xmlGetDtdAttrDesc(doc->intSubset, elem->name,
- attr->name);
+ xmlChar felem[50], fattr[50];
+ xmlChar *fullelemname, *fullattrname;
+
+ fullelemname = (elem->ns != NULL && elem->ns->prefix != NULL) ?
+ xmlBuildQName(elem->name, elem->ns->prefix, felem, 50) :
+ (xmlChar *)elem->name;
+
+ fullattrname = (attr->ns != NULL && attr->ns->prefix != NULL) ?
+ xmlBuildQName(attr->name, attr->ns->prefix, fattr, 50) :
+ (xmlChar *)attr->name;
+
+ if (fullelemname != NULL && fullattrname != NULL) {
+ attrDecl = xmlGetDtdAttrDesc(doc->intSubset, fullelemname,
+ fullattrname);
if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdAttrDesc(doc->extSubset, elem->name,
- attr->name);
+ attrDecl = xmlGetDtdAttrDesc(doc->extSubset, fullelemname,
+ fullattrname);
}
+ if ((fullattrname != fattr) && (fullattrname != attr->name))
+ xmlFree(fullattrname);
+ if ((fullelemname != felem) && (fullelemname != elem->name))
+ xmlFree(fullelemname);
+
if ((attrDecl != NULL) && (attrDecl->atype == XML_ATTRIBUTE_ID))
return(1);
}
@@ -3866,7 +3873,7 @@ xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
fullname = xmlBuildQName(elem->name, elem->ns->prefix, fn, 50);
if (fullname == NULL)
- return(0);
+ return(NULL);
attrDecl = xmlGetDtdAttrDesc(doc->intSubset, fullname, name);
if ((attrDecl == NULL) && (doc->extSubset != NULL)) {
attrDecl = xmlGetDtdAttrDesc(doc->extSubset, fullname, name);
@@ -3951,7 +3958,7 @@ xmlValidNormalizeAttributeValue(xmlDocPtr doc, xmlNodePtr elem,
fullname = xmlBuildQName(elem->name, elem->ns->prefix, fn, 50);
if (fullname == NULL)
- return(0);
+ return(NULL);
attrDecl = xmlGetDtdAttrDesc(doc->intSubset, fullname, name);
if ((attrDecl == NULL) && (doc->extSubset != NULL))
attrDecl = xmlGetDtdAttrDesc(doc->extSubset, fullname, name);
@@ -5857,24 +5864,12 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
NULL,NULL,NULL);
return(0);
}
- if (elem->properties != NULL) {
- xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
- "Text element has attribute !\n",
- NULL,NULL,NULL);
- return(0);
- }
if (elem->ns != NULL) {
xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
"Text element has namespace !\n",
NULL,NULL,NULL);
return(0);
}
- if (elem->nsDef != NULL) {
- xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
- "Text element has namespace !\n",
- NULL,NULL,NULL);
- return(0);
- }
if (elem->content == NULL) {
xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
"Text element has no content !\n",
@@ -6299,23 +6294,25 @@ xmlValidateElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem) {
}
ret &= xmlValidateOneElement(ctxt, doc, elem);
- attr = elem->properties;
- while (attr != NULL) {
- value = xmlNodeListGetString(doc, attr->children, 0);
- ret &= xmlValidateOneAttribute(ctxt, doc, elem, attr, value);
- if (value != NULL)
- xmlFree((char *)value);
- attr= attr->next;
- }
- ns = elem->nsDef;
- while (ns != NULL) {
- if (elem->ns == NULL)
- ret &= xmlValidateOneNamespace(ctxt, doc, elem, NULL,
- ns, ns->href);
- else
- ret &= xmlValidateOneNamespace(ctxt, doc, elem, elem->ns->prefix,
- ns, ns->href);
- ns = ns->next;
+ if (elem->type == XML_ELEMENT_NODE) {
+ attr = elem->properties;
+ while (attr != NULL) {
+ value = xmlNodeListGetString(doc, attr->children, 0);
+ ret &= xmlValidateOneAttribute(ctxt, doc, elem, attr, value);
+ if (value != NULL)
+ xmlFree((char *)value);
+ attr= attr->next;
+ }
+ ns = elem->nsDef;
+ while (ns != NULL) {
+ if (elem->ns == NULL)
+ ret &= xmlValidateOneNamespace(ctxt, doc, elem, NULL,
+ ns, ns->href);
+ else
+ ret &= xmlValidateOneNamespace(ctxt, doc, elem,
+ elem->ns->prefix, ns, ns->href);
+ ns = ns->next;
+ }
}
child = elem->children;
while (child != NULL) {
@@ -6808,7 +6805,7 @@ xmlValidGetPotentialChildren(xmlElementContent *ctree, const xmlChar **list,
/*
* Dummy function to suppress messages while we try out valid elements
*/
-static void xmlNoValidityErr(void *ctx ATTRIBUTE_UNUSED,
+static void XMLCDECL xmlNoValidityErr(void *ctx ATTRIBUTE_UNUSED,
const char *msg ATTRIBUTE_UNUSED, ...) {
return;
}
diff --git a/win32/Makefile.msvc b/win32/Makefile.msvc
index 3d11576..0c0a41b 100644
--- a/win32/Makefile.msvc
+++ b/win32/Makefile.msvc
@@ -115,6 +115,7 @@ XML_OBJS = $(XML_INTDIR)\c14n.obj\
$(XML_INTDIR)\relaxng.obj\
$(XML_INTDIR)\SAX2.obj\
$(XML_INTDIR)\SAX.obj\
+ $(XML_INTDIR)\schematron.obj\
$(XML_INTDIR)\threads.obj\
$(XML_INTDIR)\tree.obj\
$(XML_INTDIR)\uri.obj\
@@ -159,6 +160,7 @@ XML_OBJS_A = $(XML_INTDIR_A)\c14n.obj\
$(XML_INTDIR_A)\relaxng.obj\
$(XML_INTDIR_A)\SAX2.obj\
$(XML_INTDIR_A)\SAX.obj\
+ $(XML_INTDIR_A)\schematron.obj\
$(XML_INTDIR_A)\threads.obj\
$(XML_INTDIR_A)\tree.obj\
$(XML_INTDIR_A)\uri.obj\
diff --git a/win32/configure.js b/win32/configure.js
index d857146..6c9909b 100644
--- a/win32/configure.js
+++ b/win32/configure.js
@@ -45,6 +45,7 @@ var withZlib = false;
var withDebug = true;
var withMemDebug = false;
var withSchemas = true;
+var withSchematron = true;
var withRegExps = true;
var withModules = true;
var withTree = true;
@@ -138,6 +139,7 @@ function usage()
txt += " legacy: Enable Deprecated api's (" + (withLegacy? "yes" : "no") + ")\n";
txt += " output: Enable serialization support (" + (withOutput? "yes" : "no") + ")\n";
txt += " schemas: Enable XML Schema support (" + (withSchemas? "yes" : "no") + ")\n";
+ txt += " schematron: Enable Schematron support (" + (withSchematron? "yes" : "no") + ")\n";
txt += " python: Build Python bindings (" + (withPython? "yes" : "no") + ")\n";
txt += "\nWin32 build options, default value given in parentheses:\n\n";
txt += " compiler: Compiler to be used [msvc|mingw|bcb] (" + compiler + ")\n";
@@ -232,6 +234,7 @@ function discoverVersion()
vf.WriteLine("WITH_DEBUG=" + (withDebug? "1" : "0"));
vf.WriteLine("WITH_MEM_DEBUG=" + (withMemDebug? "1" : "0"));
vf.WriteLine("WITH_SCHEMAS=" + (withSchemas? "1" : "0"));
+ vf.WriteLine("WITH_SCHEMATRON=" + (withSchematron? "1" : "0"));
vf.WriteLine("WITH_REGEXPS=" + (withRegExps? "1" : "0"));
vf.WriteLine("WITH_MODULES=" + (withModules? "1" : "0"));
vf.WriteLine("WITH_TREE=" + (withTree? "1" : "0"));
@@ -320,6 +323,8 @@ function configureLibxml()
of.WriteLine(s.replace(/\@WITH_MEM_DEBUG\@/, withMemDebug? "1" : "0"));
} else if (s.search(/\@WITH_SCHEMAS\@/) != -1) {
of.WriteLine(s.replace(/\@WITH_SCHEMAS\@/, withSchemas? "1" : "0"));
+ } else if (s.search(/\@WITH_SCHEMATRON\@/) != -1) {
+ of.WriteLine(s.replace(/\@WITH_SCHEMATRON\@/, withSchematron? "1" : "0"));
} else if (s.search(/\@WITH_REGEXPS\@/) != -1) {
of.WriteLine(s.replace(/\@WITH_REGEXPS\@/, withRegExps? "1" : "0"));
} else if (s.search(/\@WITH_MODULES\@/) != -1) {
@@ -459,8 +464,12 @@ for (i = 0; (i < WScript.Arguments.length) && (error == 0); i++) {
withMemDebug = strToBool(arg.substring(opt.length + 1, arg.length));
else if (opt == "schemas")
withSchemas = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "schematron")
+ withSchematron = strToBool(arg.substring(opt.length + 1, arg.length));
else if (opt == "regexps")
withRegExps = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "modules")
+ withModules = strToBool(arg.substring(opt.length + 1, arg.length));
else if (opt == "tree")
withTree = strToBool(arg.substring(opt.length + 1, arg.length));
else if (opt == "reader")
@@ -638,6 +647,7 @@ txtOut += " SAX1 support: " + boolToStr(withSax1) + "\n";
txtOut += " Legacy support: " + boolToStr(withLegacy) + "\n";
txtOut += " Output support: " + boolToStr(withOutput) + "\n";
txtOut += "XML Schema support: " + boolToStr(withSchemas) + "\n";
+txtOut += "Schematron support: " + boolToStr(withSchematron) + "\n";
txtOut += " Python bindings: " + boolToStr(withPython) + "\n";
txtOut += "\n";
txtOut += "Win32 build configuration\n";
diff --git a/win32/libxml2.def.src b/win32/libxml2.def.src
index a0eb545..f7ab402 100644
--- a/win32/libxml2.def.src
+++ b/win32/libxml2.def.src
@@ -11,6 +11,12 @@ __docbDefaultSAXHandler
docbDefaultSAXHandler DATA
#endif
#endif
+#ifdef LIBXML_REGEXP_ENABLED
+emptyExp DATA
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+forbiddenExp DATA
+#endif
#ifdef LIBXML_THREAD_ENABLED
#ifdef LIBXML_HTML_ENABLED
__htmlDefaultSAXHandler
@@ -517,6 +523,9 @@ xmlAutomataNewCounterTrans
xmlAutomataNewEpsilon
#endif
#ifdef LIBXML_AUTOMATA_ENABLED
+xmlAutomataNewNegTrans
+#endif
+#ifdef LIBXML_AUTOMATA_ENABLED
xmlAutomataNewOnceTrans
#endif
#ifdef LIBXML_AUTOMATA_ENABLED
@@ -775,6 +784,63 @@ xmlEncodeEntities
xmlEncodeEntitiesReentrant
xmlEncodeSpecialChars
xmlErrMemory
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpCtxtNbCons
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpCtxtNbNodes
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpDump
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpExpDerive
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpFree
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpFreeCtxt
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpGetLanguage
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpGetStart
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpIsNillable
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpMaxToken
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpNewAtom
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpNewCtxt
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpNewOr
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpNewRange
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpNewSeq
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpParse
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpRef
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpStringDerive
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpSubsume
+#endif
xmlFileClose
xmlFileMatch
xmlFileOpen
@@ -850,6 +916,7 @@ xmlGetRefs
xmlGetThreadId
xmlGetUTF8Char
xmlHandleEntity
+xmlHasFeature
xmlHasNsProp
xmlHasProp
xmlHashAddEntry
@@ -1273,6 +1340,7 @@ xmlParseStartTag
xmlParseSystemLiteral
xmlParseTextDecl
xmlParseURI
+xmlParseURIRaw
xmlParseURIReference
xmlParseVersionInfo
xmlParseVersionNum
@@ -1306,6 +1374,7 @@ xmlPatternFromRoot
xmlPatternGetStreamCtxt
xmlPatternMatch
xmlPatternMaxDepth
+xmlPatternMinDepth
xmlPatternStreamable
xmlPatterncompile
xmlPedanticParserDefault
@@ -1430,6 +1499,9 @@ xmlRelaxNGSetParserErrors
xmlRelaxNGSetValidErrors
#endif
#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGSetValidStructuredErrors
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
xmlRelaxNGValidateDoc
#endif
#ifdef LIBXML_SCHEMAS_ENABLED
@@ -1586,6 +1658,9 @@ xmlSchemaInitTypes
xmlSchemaIsBuiltInTypeFacet
#endif
#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaIsValid
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
xmlSchemaNewDocParserCtxt
#endif
#ifdef LIBXML_SCHEMAS_ENABLED
@@ -1613,6 +1688,12 @@ xmlSchemaNewValidCtxt
xmlSchemaParse
#endif
#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaSAXPlug
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaSAXUnplug
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
xmlSchemaSetParserErrors
#endif
#ifdef LIBXML_SCHEMAS_ENABLED
@@ -1622,6 +1703,9 @@ xmlSchemaSetValidErrors
xmlSchemaSetValidOptions
#endif
#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaSetValidStructuredErrors
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
xmlSchemaValPredefTypeNode
#endif
#ifdef LIBXML_SCHEMAS_ENABLED
@@ -1675,6 +1759,15 @@ xmlSchemaValueGetNext
#ifdef LIBXML_SCHEMAS_ENABLED
xmlSchemaWhiteSpaceReplace
#endif
+xmlSchematronFree
+xmlSchematronFreeParserCtxt
+xmlSchematronFreeValidCtxt
+xmlSchematronNewDocParserCtxt
+xmlSchematronNewMemParserCtxt
+xmlSchematronNewParserCtxt
+xmlSchematronNewValidCtxt
+xmlSchematronParse
+xmlSchematronValidateDoc
xmlSearchNs
xmlSearchNsByHref
xmlSetBufferAllocationScheme
@@ -1836,8 +1929,10 @@ xmlTextReaderRelaxNGSetSchema
#ifdef LIBXML_SCHEMAS_ENABLED
xmlTextReaderRelaxNGValidate
#endif
+xmlTextReaderSchemaValidate
xmlTextReaderSetErrorHandler
xmlTextReaderSetParserProp
+xmlTextReaderSetSchema
xmlTextReaderSetStructuredErrorHandler
xmlTextReaderStandalone
xmlTextReaderValue
diff --git a/xinclude.c b/xinclude.c
index ab64096..503eb76 100644
--- a/xinclude.c
+++ b/xinclude.c
@@ -237,7 +237,7 @@ xmlXIncludeNewRef(xmlXIncludeCtxtPtr ctxt, const xmlChar *URI,
ret->URI = xmlStrdup(URI);
ret->fragment = NULL;
ret->ref = ref;
- ret->doc = 0;
+ ret->doc = NULL;
ret->count = 0;
ret->xml = 0;
ret->inc = NULL;
@@ -360,7 +360,7 @@ xmlXIncludeURLPop(xmlXIncludeCtxtPtr ctxt)
else
ctxt->url = NULL;
ret = ctxt->urlTab[ctxt->urlNr];
- ctxt->urlTab[ctxt->urlNr] = 0;
+ ctxt->urlTab[ctxt->urlNr] = NULL;
if (ret != NULL)
xmlFree(ret);
}
@@ -1952,7 +1952,7 @@ xmlXIncludeLoadFallback(xmlXIncludeCtxtPtr ctxt, xmlNodePtr fallback, int nr) {
static xmlNodePtr
xmlXIncludePreProcessNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node) {
xmlXIncludeAddNode(ctxt, node);
- return(0);
+ return(NULL);
}
/**
@@ -2303,7 +2303,7 @@ static int
xmlXIncludeDoProcess(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr tree) {
xmlNodePtr cur;
int ret = 0;
- int i;
+ int i, start;
if ((doc == NULL) || (tree == NULL))
return(-1);
@@ -2315,6 +2315,10 @@ xmlXIncludeDoProcess(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr tree) {
if (ret < 0)
return(-1);
}
+ if (tree)
+ start = ctxt->incNr;
+ else
+ start = ctxt->incBase;
/*
* First phase: lookup the elements in the document
@@ -2355,7 +2359,7 @@ xmlXIncludeDoProcess(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr tree) {
/*
* Second Phase : collect the infosets fragments
*/
- for (i = ctxt->incBase;i < ctxt->incNr; i++) {
+ for (i = start;i < ctxt->incNr; i++) {
xmlXIncludeLoadNode(ctxt, i);
ret++;
}
diff --git a/xml2-config.in b/xml2-config.in
index 304df6c..f679d81 100644
--- a/xml2-config.in
+++ b/xml2-config.in
@@ -15,7 +15,6 @@ Known values for OPTION are:
--prefix=DIR change libxml prefix [default $prefix]
--exec-prefix=DIR change libxml exec prefix [default $exec_prefix]
--libs print library linking information
- --libtool-libs print linking information for use with libtool
--cflags print pre-processor and compiler flags
--modules module support enabled
--help display this help and exit
diff --git a/xmlIO.c b/xmlIO.c
index a000e8c..1e73b6d 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -1206,7 +1206,7 @@ xmlCreateZMemBuff( int compression ) {
}
/* Set the header data. The CRC will be needed for the trailer */
- buff->crc = crc32( 0L, Z_NULL, 0 );
+ buff->crc = crc32( 0L, NULL, 0 );
hdr_lgth = snprintf( (char *)buff->zbuff, buff->size,
"%c%c%c%c%c%c%c%c%c%c",
GZ_MAGIC1, GZ_MAGIC2, Z_DEFLATED,
@@ -3533,7 +3533,6 @@ xmlGetExternalEntityLoader(void) {
*
* Load an external entity, note that the use of this function for
* unparsed entities may generate problems
- * TODO: a more generic External entity API must be designed
*
* Returns the xmlParserInputPtr or NULL
*/
diff --git a/xmllint.c b/xmllint.c
index 0cbc3d1..6785e25 100644
--- a/xmllint.c
+++ b/xmllint.c
@@ -85,6 +85,9 @@
#endif
#include <libxml/globals.h>
#include <libxml/xmlreader.h>
+#ifdef LIBXML_SCHEMATRON_ENABLED
+#include <libxml/schematron.h>
+#endif
#ifdef LIBXML_SCHEMAS_ENABLED
#include <libxml/relaxng.h>
#include <libxml/xmlschemas.h>
@@ -143,6 +146,10 @@ static xmlRelaxNGPtr relaxngschemas = NULL;
static char * schema = NULL;
static xmlSchemaPtr wxschemas = NULL;
#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+static char * schematron = NULL;
+static xmlSchematronPtr wxschematron = NULL;
+#endif
static int repeat = 0;
static int insert = 0;
#if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED)
@@ -189,7 +196,7 @@ static const char *pattern = NULL;
static xmlPatternPtr patternc = NULL;
static xmlStreamCtxtPtr patstream = NULL;
#endif
-static int options = 0;
+static int options = XML_PARSE_COMPACT;
static int sax = 0;
/************************************************************************
@@ -228,7 +235,7 @@ void parsePath(const xmlChar *path) {
}
}
-xmlExternalEntityLoader defaultEntityLoader = NULL;
+static xmlExternalEntityLoader defaultEntityLoader = NULL;
static xmlParserInputPtr
xmllintExternalEntityLoader(const char *URL, const char *ID,
@@ -413,7 +420,7 @@ startTimer(void)
* message about the timing performed; format is a printf
* type argument
*/
-static void
+static void XMLCDECL
endTimer(const char *fmt, ...)
{
long msec;
@@ -449,7 +456,7 @@ startTimer(void)
{
begin = clock();
}
-static void
+static void XMLCDECL
endTimer(const char *fmt, ...)
{
long msec;
@@ -478,7 +485,7 @@ startTimer(void)
* Do nothing
*/
}
-static void
+static void XMLCDECL
endTimer(char *format, ...)
{
/*
@@ -501,7 +508,7 @@ endTimer(char *format, ...)
* HTML ouput *
* *
************************************************************************/
-char buffer[50000];
+static char buffer[50000];
static void
xmlHTMLEncodeSend(void) {
@@ -597,7 +604,7 @@ xmlHTMLPrintFileContext(xmlParserInputPtr input) {
* Display and format an error messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
xmlHTMLError(void *ctx, const char *msg, ...)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
@@ -634,7 +641,7 @@ xmlHTMLError(void *ctx, const char *msg, ...)
* Display and format a warning messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
xmlHTMLWarning(void *ctx, const char *msg, ...)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
@@ -672,7 +679,7 @@ xmlHTMLWarning(void *ctx, const char *msg, ...)
* Display and format an validity error messages, gives file,
* line, position and extra parameters.
*/
-static void
+static void XMLCDECL
xmlHTMLValidityError(void *ctx, const char *msg, ...)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
@@ -709,7 +716,7 @@ xmlHTMLValidityError(void *ctx, const char *msg, ...)
* Display and format a validity warning messages, gives file, line,
* position and extra parameters.
*/
-static void
+static void XMLCDECL
xmlHTMLValidityWarning(void *ctx, const char *msg, ...)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
@@ -810,7 +817,7 @@ static void myClose(FILE *f) {
/*
* empty SAX block
*/
-xmlSAXHandler emptySAXHandlerStruct = {
+static xmlSAXHandler emptySAXHandlerStruct = {
NULL, /* internalSubset */
NULL, /* isStandalone */
NULL, /* hasInternalSubset */
@@ -845,7 +852,7 @@ xmlSAXHandler emptySAXHandlerStruct = {
NULL /* xmlStructuredErrorFunc */
};
-xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
+static xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
extern xmlSAXHandlerPtr debugSAXHandler;
static int callbacks;
@@ -1373,7 +1380,7 @@ commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
* Display and format a warning messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
{
va_list args;
@@ -1396,7 +1403,7 @@ warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
* Display and format a error messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
{
va_list args;
@@ -1419,7 +1426,7 @@ errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
* Display and format a fatalError messages, gives file, line, position and
* extra parameters.
*/
-static void
+static void XMLCDECL
fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
{
va_list args;
@@ -1433,7 +1440,7 @@ fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
va_end(args);
}
-xmlSAXHandler debugSAXHandlerStruct = {
+static xmlSAXHandler debugSAXHandlerStruct = {
internalSubsetDebug,
isStandaloneDebug,
hasInternalSubsetDebug,
@@ -1557,7 +1564,7 @@ endElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
fprintf(stdout, ", '%s')\n", (char *) URI);
}
-xmlSAXHandler debugSAX2HandlerStruct = {
+static xmlSAXHandler debugSAX2HandlerStruct = {
internalSubsetDebug,
isStandaloneDebug,
hasInternalSubsetDebug,
@@ -1592,7 +1599,7 @@ xmlSAXHandler debugSAX2HandlerStruct = {
NULL
};
-xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct;
+static xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct;
static void
testSAX(const char *filename) {
@@ -2580,6 +2587,46 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
xmlFreeValidCtxt(cvp);
}
#endif /* LIBXML_VALID_ENABLED */
+#ifdef LIBXML_SCHEMATRON_ENABLED
+ if (wxschematron != NULL) {
+ xmlSchematronValidCtxtPtr ctxt;
+ int ret;
+ int flag;
+
+ if ((timing) && (!repeat)) {
+ startTimer();
+ }
+
+ if (debug)
+ flag = XML_SCHEMATRON_OUT_XML;
+ else
+ flag = XML_SCHEMATRON_OUT_TEXT;
+ if (noout)
+ flag |= XML_SCHEMATRON_OUT_QUIET;
+ ctxt = xmlSchematronNewValidCtxt(wxschematron, flag);
+#if 0
+ xmlSchematronSetValidErrors(ctxt,
+ (xmlSchematronValidityErrorFunc) fprintf,
+ (xmlSchematronValidityWarningFunc) fprintf,
+ stderr);
+#endif
+ ret = xmlSchematronValidateDoc(ctxt, doc);
+ if (ret == 0) {
+ fprintf(stderr, "%s validates\n", filename);
+ } else if (ret > 0) {
+ fprintf(stderr, "%s fails to validate\n", filename);
+ progresult = XMLLINT_ERR_VALID;
+ } else {
+ fprintf(stderr, "%s validation generated an internal error\n",
+ filename);
+ progresult = XMLLINT_ERR_VALID;
+ }
+ xmlSchematronFreeValidCtxt(ctxt);
+ if ((timing) && (!repeat)) {
+ endTimer("Validating");
+ }
+ }
+#endif
#ifdef LIBXML_SCHEMAS_ENABLED
if (relaxngschemas != NULL) {
xmlRelaxNGValidCtxtPtr ctxt;
@@ -2666,54 +2713,36 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
static void showVersion(const char *name) {
fprintf(stderr, "%s: using libxml version %s\n", name, xmlParserVersion);
fprintf(stderr, " compiled with: ");
-#ifdef LIBXML_VALID_ENABLED
- fprintf(stderr, "DTDValid ");
-#endif
-#ifdef LIBXML_FTP_ENABLED
- fprintf(stderr, "FTP ");
-#endif
-#ifdef LIBXML_HTTP_ENABLED
- fprintf(stderr, "HTTP ");
-#endif
-#ifdef LIBXML_HTML_ENABLED
- fprintf(stderr, "HTML ");
-#endif
-#ifdef LIBXML_C14N_ENABLED
- fprintf(stderr, "C14N ");
-#endif
-#ifdef LIBXML_CATALOG_ENABLED
- fprintf(stderr, "Catalog ");
-#endif
-#ifdef LIBXML_XPATH_ENABLED
- fprintf(stderr, "XPath ");
-#endif
-#ifdef LIBXML_XPTR_ENABLED
- fprintf(stderr, "XPointer ");
-#endif
-#ifdef LIBXML_XINCLUDE_ENABLED
- fprintf(stderr, "XInclude ");
-#endif
-#ifdef LIBXML_ICONV_ENABLED
- fprintf(stderr, "Iconv ");
-#endif
-#ifdef DEBUG_MEMORY_LOCATION
- fprintf(stderr, "MemDebug ");
-#endif
-#ifdef LIBXML_UNICODE_ENABLED
- fprintf(stderr, "Unicode ");
-#endif
-#ifdef LIBXML_REGEXP_ENABLED
- fprintf(stderr, "Regexps ");
-#endif
-#ifdef LIBXML_AUTOMATA_ENABLED
- fprintf(stderr, "Automata ");
-#endif
-#ifdef LIBXML_SCHEMAS_ENABLED
- fprintf(stderr, "Schemas ");
-#endif
-#ifdef LIBXML_MODULES_ENABLED
- fprintf(stderr, "Modules ");
-#endif
+ if (xmlHasFeature(XML_FEATURE_THREAD)) fprintf(stderr, "Threads ");
+ if (xmlHasFeature(XML_FEATURE_TREE)) fprintf(stderr, "Tree ");
+ if (xmlHasFeature(XML_FEATURE_OUTPUT)) fprintf(stderr, "Output ");
+ if (xmlHasFeature(XML_FEATURE_PUSH)) fprintf(stderr, "Push ");
+ if (xmlHasFeature(XML_FEATURE_READER)) fprintf(stderr, "Reader ");
+ if (xmlHasFeature(XML_FEATURE_PATTERN)) fprintf(stderr, "Patterns ");
+ if (xmlHasFeature(XML_FEATURE_WRITER)) fprintf(stderr, "Writer ");
+ if (xmlHasFeature(XML_FEATURE_SAX1)) fprintf(stderr, "SAXv1 ");
+ if (xmlHasFeature(XML_FEATURE_FTP)) fprintf(stderr, "FTP ");
+ if (xmlHasFeature(XML_FEATURE_HTTP)) fprintf(stderr, "HTTP ");
+ if (xmlHasFeature(XML_FEATURE_VALID)) fprintf(stderr, "DTDValid ");
+ if (xmlHasFeature(XML_FEATURE_HTML)) fprintf(stderr, "HTML ");
+ if (xmlHasFeature(XML_FEATURE_LEGACY)) fprintf(stderr, "Legacy ");
+ if (xmlHasFeature(XML_FEATURE_C14N)) fprintf(stderr, "C14N ");
+ if (xmlHasFeature(XML_FEATURE_CATALOG)) fprintf(stderr, "Catalog ");
+ if (xmlHasFeature(XML_FEATURE_XPATH)) fprintf(stderr, "XPath ");
+ if (xmlHasFeature(XML_FEATURE_XPTR)) fprintf(stderr, "XPointer ");
+ if (xmlHasFeature(XML_FEATURE_XINCLUDE)) fprintf(stderr, "XInclude ");
+ if (xmlHasFeature(XML_FEATURE_ICONV)) fprintf(stderr, "Iconv ");
+ if (xmlHasFeature(XML_FEATURE_ISO8859X)) fprintf(stderr, "ISO8859X ");
+ if (xmlHasFeature(XML_FEATURE_UNICODE)) fprintf(stderr, "Unicode ");
+ if (xmlHasFeature(XML_FEATURE_REGEXP)) fprintf(stderr, "Regexps ");
+ if (xmlHasFeature(XML_FEATURE_AUTOMATA)) fprintf(stderr, "Automata ");
+ if (xmlHasFeature(XML_FEATURE_EXPR)) fprintf(stderr, "Expr ");
+ if (xmlHasFeature(XML_FEATURE_SCHEMAS)) fprintf(stderr, "Schemas ");
+ if (xmlHasFeature(XML_FEATURE_SCHEMATRON)) fprintf(stderr, "Schematron ");
+ if (xmlHasFeature(XML_FEATURE_MODULES)) fprintf(stderr, "Modules ");
+ if (xmlHasFeature(XML_FEATURE_DEBUG)) fprintf(stderr, "Debug ");
+ if (xmlHasFeature(XML_FEATURE_DEBUG_MEM)) fprintf(stderr, "MemDebug ");
+ if (xmlHasFeature(XML_FEATURE_DEBUG_RUN)) fprintf(stderr, "RunDebug ");
fprintf(stderr, "\n");
}
@@ -2743,6 +2772,7 @@ static void usage(const char *name) {
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--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");
printf("\t--nowrap : do not put HTML doc wrapper\n");
#ifdef LIBXML_VALID_ENABLED
@@ -2810,6 +2840,9 @@ static void usage(const char *name) {
printf("\t--relaxng schema : do RelaxNG validation against the schema\n");
printf("\t--schema schema : do validation against the WXS schema\n");
#endif
+#ifdef LIBXML_SCHEMATRON_ENABLED
+ printf("\t--schematron schema : do validation against a schematron\n");
+#endif
#ifdef LIBXML_SAX1_ENABLED
printf("\t--sax1: use the old SAX1 interfaces for processing\n");
#endif
@@ -3112,9 +3145,19 @@ main(int argc, char **argv) {
schema = argv[i];
noent++;
#endif
+#ifdef LIBXML_SCHEMATRON_ENABLED
+ } else if ((!strcmp(argv[i], "-schematron")) ||
+ (!strcmp(argv[i], "--schematron"))) {
+ i++;
+ schematron = argv[i];
+ noent++;
+#endif
} else if ((!strcmp(argv[i], "-nonet")) ||
(!strcmp(argv[i], "--nonet"))) {
options |= XML_PARSE_NONET;
+ } else if ((!strcmp(argv[i], "-nocompact")) ||
+ (!strcmp(argv[i], "--nocompact"))) {
+ options &= ~XML_PARSE_COMPACT;
} else if ((!strcmp(argv[i], "-load-trace")) ||
(!strcmp(argv[i], "--load-trace"))) {
load_trace++;
@@ -3193,6 +3236,40 @@ main(int argc, char **argv) {
argv[0]);
}
+#ifdef LIBXML_SCHEMATRON_ENABLED
+ if ((schematron != NULL) && (sax == 0)
+#ifdef LIBXML_READER_ENABLED
+ && (stream == 0)
+#endif /* LIBXML_READER_ENABLED */
+ ) {
+ xmlSchematronParserCtxtPtr ctxt;
+
+ /* forces loading the DTDs */
+ xmlLoadExtDtdDefaultValue |= 1;
+ options |= XML_PARSE_DTDLOAD;
+ if (timing) {
+ startTimer();
+ }
+ ctxt = xmlSchematronNewParserCtxt(schematron);
+#if 0
+ xmlSchematronSetParserErrors(ctxt,
+ (xmlSchematronValidityErrorFunc) fprintf,
+ (xmlSchematronValidityWarningFunc) fprintf,
+ stderr);
+#endif
+ wxschematron = xmlSchematronParse(ctxt);
+ if (wxschematron == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Schematron schema %s failed to compile\n", schematron);
+ progresult = XMLLINT_ERR_SCHEMACOMP;
+ schematron = NULL;
+ }
+ xmlSchematronFreeParserCtxt(ctxt);
+ if (timing) {
+ endTimer("Compiling the schemas");
+ }
+ }
+#endif
#ifdef LIBXML_SCHEMAS_ENABLED
if ((relaxng != NULL) && (sax == 0)
#ifdef LIBXML_READER_ENABLED
@@ -3309,6 +3386,11 @@ main(int argc, char **argv) {
i++;
continue;
}
+ if ((!strcmp(argv[i], "-schematron")) ||
+ (!strcmp(argv[i], "--schematron"))) {
+ i++;
+ continue;
+ }
#ifdef LIBXML_PATTERN_ENABLED
if ((!strcmp(argv[i], "-pattern")) ||
(!strcmp(argv[i], "--pattern"))) {
@@ -3375,6 +3457,10 @@ main(int argc, char **argv) {
if ((files == 0) && (!generate) && (version == 0)) {
usage(argv[0]);
}
+#ifdef LIBXML_SCHEMATRON_ENABLED
+ if (wxschematron != NULL)
+ xmlSchematronFree(wxschematron);
+#endif
#ifdef LIBXML_SCHEMAS_ENABLED
if (relaxngschemas != NULL)
xmlRelaxNGFree(relaxngschemas);
diff --git a/xmlmodule.c b/xmlmodule.c
index 8b0fab9..6cc86ee 100644
--- a/xmlmodule.c
+++ b/xmlmodule.c
@@ -85,7 +85,7 @@ xmlModuleOpen(const char *name, int options ATTRIBUTE_UNUSED)
__xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
XML_MODULE_OPEN, XML_ERR_FATAL, NULL, 0, 0,
name, NULL, 0, 0, "failed to open %s\n", name);
- return 0;
+ return(NULL);
}
module->name = xmlStrdup((const xmlChar *) name);
@@ -179,7 +179,7 @@ xmlModuleFree(xmlModulePtr module)
{
if (NULL == module) {
__xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
- XML_MODULE_CLOSE, XML_ERR_FATAL, NULL, 0, 0,
+ XML_MODULE_CLOSE, XML_ERR_FATAL, NULL, 0, NULL,
NULL, NULL, 0, 0, "null module pointer\n");
return -1;
}
diff --git a/xmlreader.c b/xmlreader.c
index 14843eb..7efa273 100644
--- a/xmlreader.c
+++ b/xmlreader.c
@@ -348,7 +348,8 @@ xmlTextReaderFreeNodeList(xmlTextReaderPtr reader, xmlNodePtr cur) {
(cur->type == XML_XINCLUDE_END)) &&
(cur->properties != NULL))
xmlTextReaderFreePropList(reader, cur->properties);
- if ((cur->type != XML_ELEMENT_NODE) &&
+ if ((cur->content != (xmlChar *) &(cur->properties)) &&
+ (cur->type != XML_ELEMENT_NODE) &&
(cur->type != XML_XINCLUDE_START) &&
(cur->type != XML_XINCLUDE_END) &&
(cur->type != XML_ENTITY_REF_NODE)) {
@@ -422,7 +423,8 @@ xmlTextReaderFreeNode(xmlTextReaderPtr reader, xmlNodePtr cur) {
(cur->type == XML_XINCLUDE_END)) &&
(cur->properties != NULL))
xmlTextReaderFreePropList(reader, cur->properties);
- if ((cur->type != XML_ELEMENT_NODE) &&
+ if ((cur->content != (xmlChar *) &(cur->properties)) &&
+ (cur->type != XML_ELEMENT_NODE) &&
(cur->type != XML_XINCLUDE_START) &&
(cur->type != XML_XINCLUDE_END) &&
(cur->type != XML_ENTITY_REF_NODE)) {
@@ -598,14 +600,14 @@ xmlTextReaderEntPop(xmlTextReaderPtr reader)
xmlNodePtr ret;
if (reader->entNr <= 0)
- return (0);
+ return (NULL);
reader->entNr--;
if (reader->entNr > 0)
reader->ent = reader->entTab[reader->entNr - 1];
else
reader->ent = NULL;
ret = reader->entTab[reader->entNr];
- reader->entTab[reader->entNr] = 0;
+ reader->entTab[reader->entNr] = NULL;
return (ret);
}
@@ -2172,7 +2174,7 @@ xmlFreeTextReader(xmlTextReaderPtr reader) {
if ((reader->ctxt->vctxt.vstateTab != NULL) &&
(reader->ctxt->vctxt.vstateMax > 0)){
xmlFree(reader->ctxt->vctxt.vstateTab);
- reader->ctxt->vctxt.vstateTab = 0;
+ reader->ctxt->vctxt.vstateTab = NULL;
reader->ctxt->vctxt.vstateMax = 0;
}
if (reader->allocs & XML_TEXTREADER_CTXT)
@@ -2309,15 +2311,42 @@ xmlTextReaderGetAttribute(xmlTextReaderPtr reader, const xmlChar *name) {
return(NULL);
localname = xmlSplitQName2(name, &prefix);
- if (localname == NULL)
- return(xmlGetProp(reader->node, name));
-
- ns = xmlSearchNs(reader->node->doc, reader->node, prefix);
- if (ns != NULL)
- ret = xmlGetNsProp(reader->node, localname, ns->href);
+ if (localname == NULL) {
+ /*
+ * Namespace default decl
+ */
+ if (xmlStrEqual(name, BAD_CAST "xmlns")) {
+ ns = reader->node->nsDef;
+ while (ns != NULL) {
+ if (ns->prefix == NULL) {
+ return(xmlStrdup(ns->href));
+ }
+ ns = ns->next;
+ }
+ return NULL;
+ }
+ return(xmlGetNoNsProp(reader->node, name));
+ }
- if (localname != NULL)
- xmlFree(localname);
+ /*
+ * Namespace default decl
+ */
+ if (xmlStrEqual(prefix, BAD_CAST "xmlns")) {
+ ns = reader->node->nsDef;
+ while (ns != NULL) {
+ if ((ns->prefix != NULL) && (xmlStrEqual(ns->prefix, localname))) {
+ ret = xmlStrdup(ns->href);
+ break;
+ }
+ ns = ns->next;
+ }
+ } else {
+ ns = xmlSearchNs(reader->node->doc, reader->node, prefix);
+ if (ns != NULL)
+ ret = xmlGetNsProp(reader->node, localname, ns->href);
+ }
+
+ xmlFree(localname);
if (prefix != NULL)
xmlFree(prefix);
return(ret);
@@ -2338,6 +2367,9 @@ xmlTextReaderGetAttribute(xmlTextReaderPtr reader, const xmlChar *name) {
xmlChar *
xmlTextReaderGetAttributeNs(xmlTextReaderPtr reader, const xmlChar *localName,
const xmlChar *namespaceURI) {
+ xmlChar *prefix = NULL;
+ xmlNsPtr ns;
+
if ((reader == NULL) || (localName == NULL))
return(NULL);
if (reader->node == NULL)
@@ -2349,6 +2381,21 @@ xmlTextReaderGetAttributeNs(xmlTextReaderPtr reader, const xmlChar *localName,
if (reader->node->type != XML_ELEMENT_NODE)
return(NULL);
+ if (xmlStrEqual(namespaceURI, BAD_CAST "http://www.w3.org/2000/xmlns/")) {
+ if (! xmlStrEqual(localName, BAD_CAST "xmlns")) {
+ prefix = BAD_CAST localName;
+ }
+ ns = reader->node->nsDef;
+ while (ns != NULL) {
+ if ((prefix == NULL && ns->prefix == NULL) ||
+ ((ns->prefix != NULL) && (xmlStrEqual(ns->prefix, localName)))) {
+ return xmlStrdup(ns->href);
+ }
+ ns = ns->next;
+ }
+ return NULL;
+ }
+
return(xmlGetNsProp(reader->node, localName, namespaceURI));
}
@@ -2599,6 +2646,8 @@ xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader,
const xmlChar *localName, const xmlChar *namespaceURI) {
xmlAttrPtr prop;
xmlNodePtr node;
+ xmlNsPtr ns;
+ xmlChar *prefix = NULL;
if ((reader == NULL) || (localName == NULL) || (namespaceURI == NULL))
return(-1);
@@ -2608,10 +2657,22 @@ xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader,
return(0);
node = reader->node;
- /*
- * A priori reading http://www.w3.org/TR/REC-xml-names/ there is no
- * namespace name associated to "xmlns"
- */
+ if (xmlStrEqual(namespaceURI, BAD_CAST "http://www.w3.org/2000/xmlns/")) {
+ if (! xmlStrEqual(localName, BAD_CAST "xmlns")) {
+ prefix = BAD_CAST localName;
+ }
+ ns = reader->node->nsDef;
+ while (ns != NULL) {
+ if ((prefix == NULL && ns->prefix == NULL) ||
+ ((ns->prefix != NULL) && (xmlStrEqual(ns->prefix, localName)))) {
+ reader->curnode = (xmlNodePtr) ns;
+ return(1);
+ }
+ ns = ns->next;
+ }
+ return(0);
+ }
+
prop = node->properties;
while (prop != NULL) {
/*
@@ -2751,7 +2812,9 @@ xmlTextReaderReadAttributeValue(xmlTextReaderPtr reader) {
reader->faketext = xmlNewDocText(reader->node->doc,
ns->href);
} else {
- if (reader->faketext->content != NULL)
+ if ((reader->faketext->content != NULL) &&
+ (reader->faketext->content !=
+ (xmlChar *) &(reader->faketext->properties)))
xmlFree(reader->faketext->content);
reader->faketext->content = xmlStrdup(ns->href);
}
@@ -3880,6 +3943,66 @@ xmlTextReaderCurrentDoc(xmlTextReaderPtr reader) {
}
#ifdef LIBXML_SCHEMAS_ENABLED
+
+static char *
+xmlTextReaderBuildMessage(const char *msg, va_list ap);
+
+static void XMLCDECL
+xmlTextReaderValidityError(void *ctxt, const char *msg, ...);
+
+static void XMLCDECL
+xmlTextReaderValidityWarning(void *ctxt, const char *msg, ...);
+
+static void XMLCDECL xmlTextReaderValidityErrorRelay(void *ctx, const char *msg, ...)
+{
+ xmlTextReaderPtr reader = (xmlTextReaderPtr) ctx;
+ char * str;
+ va_list ap;
+
+ va_start(ap,msg);
+ str = xmlTextReaderBuildMessage(msg,ap);
+ if (!reader->errorFunc) {
+ xmlTextReaderValidityError(ctx, "%s", str);
+ } else {
+ reader->errorFunc(reader->errorFuncArg, str, XML_PARSER_SEVERITY_VALIDITY_ERROR, NULL /* locator */);
+ }
+ if (str != NULL)
+ xmlFree(str);
+ va_end(ap);
+}
+
+static void XMLCDECL xmlTextReaderValidityWarningRelay(void *ctx, const char *msg, ...)
+{
+ xmlTextReaderPtr reader = (xmlTextReaderPtr) ctx;
+ char * str;
+ va_list ap;
+
+ va_start(ap,msg);
+ str = xmlTextReaderBuildMessage(msg,ap);
+ if (!reader->errorFunc) {
+ xmlTextReaderValidityWarning(ctx, "%s", str);
+ } else {
+ reader->errorFunc(reader->errorFuncArg, str, XML_PARSER_SEVERITY_VALIDITY_WARNING, NULL /* locator */);
+ }
+ if (str != NULL)
+ xmlFree(str);
+ va_end(ap);
+}
+
+static void
+xmlTextReaderStructuredError(void *ctxt, xmlErrorPtr error);
+
+static void xmlTextReaderValidityStructuredRelay(void * userData, xmlErrorPtr error)
+{
+ xmlTextReaderPtr reader = (xmlTextReaderPtr) userData;
+
+ if (reader->sErrorFunc) {
+ reader->sErrorFunc(reader->errorFuncArg, error);
+ } else {
+ xmlTextReaderStructuredError(reader, error);
+ }
+}
+
/**
* xmlTextReaderRelaxNGSetSchema:
* @reader: the xmlTextReaderPtr used
@@ -3924,9 +4047,14 @@ xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader, xmlRelaxNGPtr schema) {
return(-1);
if (reader->errorFunc != NULL) {
xmlRelaxNGSetValidErrors(reader->rngValidCtxt,
- (xmlRelaxNGValidityErrorFunc)reader->errorFunc,
- (xmlRelaxNGValidityWarningFunc) reader->errorFunc,
- reader->errorFuncArg);
+ xmlTextReaderValidityErrorRelay,
+ xmlTextReaderValidityWarningRelay,
+ reader);
+ }
+ if (reader->sErrorFunc != NULL) {
+ xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt,
+ xmlTextReaderValidityStructuredRelay,
+ reader);
}
reader->rngValidErrors = 0;
reader->rngFullNode = NULL;
@@ -3999,9 +4127,14 @@ xmlTextReaderSetSchema(xmlTextReaderPtr reader, xmlSchemaPtr schema) {
}
if (reader->errorFunc != NULL) {
xmlSchemaSetValidErrors(reader->xsdValidCtxt,
- (xmlSchemaValidityErrorFunc)reader->errorFunc,
- (xmlSchemaValidityWarningFunc) reader->errorFunc,
- reader->errorFuncArg);
+ xmlTextReaderValidityErrorRelay,
+ xmlTextReaderValidityWarningRelay,
+ reader);
+ }
+ if (reader->sErrorFunc != NULL) {
+ xmlSchemaSetValidStructuredErrors(reader->xsdValidCtxt,
+ xmlTextReaderValidityStructuredRelay,
+ reader);
}
reader->xsdValidErrors = 0;
reader->validate = XML_TEXTREADER_VALIDATE_XSD;
@@ -4051,9 +4184,14 @@ xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader, const char *rng) {
ctxt = xmlRelaxNGNewParserCtxt(rng);
if (reader->errorFunc != NULL) {
xmlRelaxNGSetParserErrors(ctxt,
- (xmlRelaxNGValidityErrorFunc) reader->errorFunc,
- (xmlRelaxNGValidityWarningFunc) reader->errorFunc,
- reader->errorFuncArg);
+ xmlTextReaderValidityErrorRelay,
+ xmlTextReaderValidityWarningRelay,
+ reader);
+ }
+ if (reader->sErrorFunc != NULL) {
+ xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt,
+ xmlTextReaderValidityStructuredRelay,
+ reader);
}
reader->rngSchemas = xmlRelaxNGParse(ctxt);
xmlRelaxNGFreeParserCtxt(ctxt);
@@ -4067,9 +4205,14 @@ xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader, const char *rng) {
}
if (reader->errorFunc != NULL) {
xmlRelaxNGSetValidErrors(reader->rngValidCtxt,
- (xmlRelaxNGValidityErrorFunc)reader->errorFunc,
- (xmlRelaxNGValidityWarningFunc) reader->errorFunc,
- reader->errorFuncArg);
+ xmlTextReaderValidityErrorRelay,
+ xmlTextReaderValidityWarningRelay,
+ reader);
+ }
+ if (reader->sErrorFunc != NULL) {
+ xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt,
+ xmlTextReaderValidityStructuredRelay,
+ reader);
}
reader->rngValidErrors = 0;
reader->rngFullNode = NULL;
@@ -4129,9 +4272,9 @@ xmlTextReaderSchemaValidate(xmlTextReaderPtr reader, const char *xsd) {
ctxt = xmlSchemaNewParserCtxt(xsd);
if (reader->errorFunc != NULL) {
xmlSchemaSetParserErrors(ctxt,
- (xmlSchemaValidityErrorFunc) reader->errorFunc,
- (xmlSchemaValidityWarningFunc) reader->errorFunc,
- reader->errorFuncArg);
+ xmlTextReaderValidityErrorRelay,
+ xmlTextReaderValidityWarningRelay,
+ reader);
}
reader->xsdSchemas = xmlSchemaParse(ctxt);
xmlSchemaFreeParserCtxt(ctxt);
@@ -4155,9 +4298,14 @@ xmlTextReaderSchemaValidate(xmlTextReaderPtr reader, const char *xsd) {
}
if (reader->errorFunc != NULL) {
xmlSchemaSetValidErrors(reader->xsdValidCtxt,
- (xmlSchemaValidityErrorFunc)reader->errorFunc,
- (xmlSchemaValidityWarningFunc) reader->errorFunc,
- reader->errorFuncArg);
+ xmlTextReaderValidityErrorRelay,
+ xmlTextReaderValidityWarningRelay,
+ reader);
+ }
+ if (reader->sErrorFunc != NULL) {
+ xmlSchemaSetValidStructuredErrors(reader->xsdValidCtxt,
+ xmlTextReaderValidityStructuredRelay,
+ reader);
}
reader->xsdValidErrors = 0;
reader->validate = XML_TEXTREADER_VALIDATE_XSD;
@@ -4385,7 +4533,7 @@ xmlTextReaderStructuredError(void *ctxt, xmlErrorPtr error) {
}
}
-static void
+static void XMLCDECL
xmlTextReaderError(void *ctxt, const char *msg, ...) {
va_list ap;
@@ -4397,7 +4545,7 @@ xmlTextReaderError(void *ctxt, const char *msg, ...) {
}
-static void
+static void XMLCDECL
xmlTextReaderWarning(void *ctxt, const char *msg, ...) {
va_list ap;
@@ -4408,7 +4556,7 @@ xmlTextReaderWarning(void *ctxt, const char *msg, ...) {
va_end(ap);
}
-static void
+static void XMLCDECL
xmlTextReaderValidityError(void *ctxt, const char *msg, ...) {
va_list ap;
int len = xmlStrlen((const xmlChar *) msg);
@@ -4426,7 +4574,7 @@ xmlTextReaderValidityError(void *ctxt, const char *msg, ...) {
}
}
-static void
+static void XMLCDECL
xmlTextReaderValidityWarning(void *ctxt, const char *msg, ...) {
va_list ap;
int len = xmlStrlen((const xmlChar *) msg);
@@ -4467,6 +4615,22 @@ xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
reader->errorFunc = f;
reader->sErrorFunc = NULL;
reader->errorFuncArg = arg;
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if (reader->rngValidCtxt) {
+ xmlRelaxNGSetValidErrors(reader->rngValidCtxt,
+ xmlTextReaderValidityErrorRelay,
+ xmlTextReaderValidityWarningRelay,
+ reader);
+ xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt, NULL, reader);
+ }
+ if (reader->xsdValidCtxt) {
+ xmlSchemaSetValidErrors(reader->xsdValidCtxt,
+ xmlTextReaderValidityErrorRelay,
+ xmlTextReaderValidityWarningRelay,
+ reader);
+ xmlSchemaSetValidStructuredErrors(reader->xsdValidCtxt, NULL, reader);
+ }
+#endif
}
else {
/* restore defaults */
@@ -4477,6 +4641,16 @@ xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
reader->errorFunc = NULL;
reader->sErrorFunc = NULL;
reader->errorFuncArg = NULL;
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if (reader->rngValidCtxt) {
+ xmlRelaxNGSetValidErrors(reader->rngValidCtxt, NULL, NULL, reader);
+ xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt, NULL, reader);
+ }
+ if (reader->xsdValidCtxt) {
+ xmlSchemaSetValidErrors(reader->xsdValidCtxt, NULL, NULL, reader);
+ xmlSchemaSetValidStructuredErrors(reader->xsdValidCtxt, NULL, reader);
+ }
+#endif
}
}
@@ -4503,6 +4677,20 @@ xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
reader->sErrorFunc = f;
reader->errorFunc = NULL;
reader->errorFuncArg = arg;
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if (reader->rngValidCtxt) {
+ xmlRelaxNGSetValidErrors(reader->rngValidCtxt, NULL, NULL, reader);
+ xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt,
+ xmlTextReaderValidityStructuredRelay,
+ reader);
+ }
+ if (reader->xsdValidCtxt) {
+ xmlSchemaSetValidErrors(reader->xsdValidCtxt, NULL, NULL, reader);
+ xmlSchemaSetValidStructuredErrors(reader->xsdValidCtxt,
+ xmlTextReaderValidityStructuredRelay,
+ reader);
+ }
+#endif
}
else {
/* restore defaults */
@@ -4514,6 +4702,16 @@ xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
reader->errorFunc = NULL;
reader->sErrorFunc = NULL;
reader->errorFuncArg = NULL;
+#ifdef LIBXML_SCHEMAS_ENABLED
+ if (reader->rngValidCtxt) {
+ xmlRelaxNGSetValidErrors(reader->rngValidCtxt, NULL, NULL, reader);
+ xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt, NULL, reader);
+ }
+ if (reader->xsdValidCtxt) {
+ xmlSchemaSetValidErrors(reader->xsdValidCtxt, NULL, NULL, reader);
+ xmlSchemaSetValidStructuredErrors(reader->xsdValidCtxt, NULL, reader);
+ }
+#endif
}
}
@@ -4582,6 +4780,12 @@ xmlTextReaderSetup(xmlTextReaderPtr reader,
if (reader == NULL)
return (-1);
+ /*
+ * we force the generation of compact text nodes on the reader
+ * since usr applications should never modify the tree
+ */
+ options |= XML_PARSE_COMPACT;
+
reader->doc = NULL;
reader->entNr = 0;
reader->parserFlags = options;
diff --git a/xmlregexp.c b/xmlregexp.c
index ee635f1..45b917b 100644
--- a/xmlregexp.c
+++ b/xmlregexp.c
@@ -38,7 +38,7 @@
#endif
/* #define DEBUG_REGEXP_GRAPH */
-/* #define DEBUG_REGEXP_EXEC */
+/* #define DEBUG_REGEXP_EXEC */
/* #define DEBUG_PUSH */
/* #define DEBUG_COMPACTION */
@@ -211,6 +211,10 @@ struct _xmlAutomataState {
int maxTrans;
int nbTrans;
xmlRegTrans *trans;
+ /* knowing states ponting to us can speed things up */
+ int maxTransTo;
+ int nbTransTo;
+ int *transTo;
};
typedef struct _xmlAutomata xmlRegParserCtxt;
@@ -242,6 +246,7 @@ struct _xmlAutomata {
xmlRegCounter *counters;
int determinist;
+ int negs;
};
struct _xmlRegexp {
@@ -329,6 +334,7 @@ struct _xmlRegExecCtxt {
static void xmlFAParseRegExp(xmlRegParserCtxtPtr ctxt, int top);
static void xmlRegFreeState(xmlRegStatePtr state);
static void xmlRegFreeAtom(xmlRegAtomPtr atom);
+static int xmlRegStrEqualWildcard(const xmlChar *expStr, const xmlChar *valStr);
/************************************************************************
* *
@@ -414,6 +420,7 @@ xmlRegEpxFromParse(xmlRegParserCtxtPtr ctxt) {
if ((ret->determinist != 0) &&
(ret->nbCounters == 0) &&
+ (ctxt->negs == 0) &&
(ret->atoms != NULL) &&
(ret->atoms[0] != NULL) &&
(ret->atoms[0]->type == XML_REGEXP_STRING)) {
@@ -656,6 +663,7 @@ xmlRegNewParserCtxt(const xmlChar *string) {
ret->string = xmlStrdup(string);
ret->cur = ret->string;
ret->neg = 0;
+ ret->negs = 0;
ret->error = 0;
ret->determinist = -1;
return(ret);
@@ -751,6 +759,8 @@ xmlRegFreeAtom(xmlRegAtomPtr atom) {
xmlFree(atom->ranges);
if ((atom->type == XML_REGEXP_STRING) && (atom->valuep != NULL))
xmlFree(atom->valuep);
+ if ((atom->type == XML_REGEXP_STRING) && (atom->valuep2 != NULL))
+ xmlFree(atom->valuep2);
if ((atom->type == XML_REGEXP_BLOCK_NAME) && (atom->valuep != NULL))
xmlFree(atom->valuep);
xmlFree(atom);
@@ -784,6 +794,8 @@ xmlRegFreeState(xmlRegStatePtr state) {
if (state->trans != NULL)
xmlFree(state->trans);
+ if (state->transTo != NULL)
+ xmlFree(state->transTo);
xmlFree(state);
}
@@ -971,6 +983,8 @@ xmlRegPrintAtom(FILE *output, xmlRegAtomPtr atom) {
fprintf(output, "NULL\n");
return;
}
+ if (atom->neg)
+ fprintf(output, "not ");
xmlRegPrintAtomType(output, atom->type);
xmlRegPrintQuantType(output, atom->quant);
if (atom->quant == XML_REGEXP_QUANT_RANGE)
@@ -1191,9 +1205,37 @@ xmlRegAtomPush(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom) {
}
static void
+xmlRegStateAddTransTo(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr target,
+ int from) {
+ if (target->maxTransTo == 0) {
+ target->maxTransTo = 8;
+ target->transTo = (int *) xmlMalloc(target->maxTransTo *
+ sizeof(int));
+ if (target->transTo == NULL) {
+ xmlRegexpErrMemory(ctxt, "adding transition");
+ target->maxTransTo = 0;
+ return;
+ }
+ } else if (target->nbTransTo >= target->maxTransTo) {
+ int *tmp;
+ target->maxTransTo *= 2;
+ tmp = (int *) xmlRealloc(target->transTo, target->maxTransTo *
+ sizeof(int));
+ if (tmp == NULL) {
+ xmlRegexpErrMemory(ctxt, "adding transition");
+ target->maxTransTo /= 2;
+ return;
+ }
+ target->transTo = tmp;
+ }
+ target->transTo[target->nbTransTo] = from;
+ target->nbTransTo++;
+}
+
+static void
xmlRegStateAddTrans(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
xmlRegAtomPtr atom, xmlRegStatePtr target,
- int counter, int count) {
+ int counter, int count, int nchk) {
int nrtrans;
@@ -1211,21 +1253,24 @@ xmlRegStateAddTrans(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
* so, silently ignore this request.
*/
- for (nrtrans=0; nrtrans<state->nbTrans; nrtrans++) {
- if ((state->trans[nrtrans].atom == atom) &&
- (state->trans[nrtrans].to == target->no) &&
- (state->trans[nrtrans].counter == counter) &&
- (state->trans[nrtrans].count == count)) {
+ if (nchk == 0) {
+ for (nrtrans = state->nbTrans - 1; nrtrans >= 0; nrtrans--) {
+ xmlRegTransPtr trans = &(state->trans[nrtrans]);
+ if ((trans->atom == atom) &&
+ (trans->to == target->no) &&
+ (trans->counter == counter) &&
+ (trans->count == count)) {
#ifdef DEBUG_REGEXP_GRAPH
- printf("Ignoring duplicate transition from %d to %d\n",
- state->no, target->no);
+ printf("Ignoring duplicate transition from %d to %d\n",
+ state->no, target->no);
#endif
- return;
- }
+ return;
+ }
+ }
}
if (state->maxTrans == 0) {
- state->maxTrans = 4;
+ state->maxTrans = 8;
state->trans = (xmlRegTrans *) xmlMalloc(state->maxTrans *
sizeof(xmlRegTrans));
if (state->trans == NULL) {
@@ -1264,6 +1309,7 @@ xmlRegStateAddTrans(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
state->trans[state->nbTrans].counter = counter;
state->trans[state->nbTrans].count = count;
state->nbTrans++;
+ xmlRegStateAddTransTo(ctxt, target, state->no);
}
static int
@@ -1313,9 +1359,9 @@ xmlFAGenerateAllTransition(xmlRegParserCtxtPtr ctxt,
ctxt->state = to;
}
if (lax)
- xmlRegStateAddTrans(ctxt, from, NULL, to, -1, REGEXP_ALL_LAX_COUNTER);
+ xmlRegStateAddTrans(ctxt, from, NULL, to, -1, REGEXP_ALL_LAX_COUNTER, 0);
else
- xmlRegStateAddTrans(ctxt, from, NULL, to, -1, REGEXP_ALL_COUNTER);
+ xmlRegStateAddTrans(ctxt, from, NULL, to, -1, REGEXP_ALL_COUNTER, 0);
}
/**
@@ -1333,7 +1379,7 @@ xmlFAGenerateEpsilonTransition(xmlRegParserCtxtPtr ctxt,
xmlRegStatePush(ctxt, to);
ctxt->state = to;
}
- xmlRegStateAddTrans(ctxt, from, NULL, to, -1, -1);
+ xmlRegStateAddTrans(ctxt, from, NULL, to, -1, -1, 0);
}
/**
@@ -1352,7 +1398,7 @@ xmlFAGenerateCountedEpsilonTransition(xmlRegParserCtxtPtr ctxt,
xmlRegStatePush(ctxt, to);
ctxt->state = to;
}
- xmlRegStateAddTrans(ctxt, from, NULL, to, counter, -1);
+ xmlRegStateAddTrans(ctxt, from, NULL, to, counter, -1, 0);
}
/**
@@ -1371,7 +1417,7 @@ xmlFAGenerateCountedTransition(xmlRegParserCtxtPtr ctxt,
xmlRegStatePush(ctxt, to);
ctxt->state = to;
}
- xmlRegStateAddTrans(ctxt, from, NULL, to, -1, counter);
+ xmlRegStateAddTrans(ctxt, from, NULL, to, -1, counter, 0);
}
/**
@@ -1467,6 +1513,23 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
break;
}
return(0);
+ } else if ((atom->min == 0) && (atom->max == 0) &&
+ (atom->quant == XML_REGEXP_QUANT_RANGE)) {
+ /*
+ * we can discard the atom and generate an epsilon transition instead
+ */
+ if (to == NULL) {
+ to = xmlRegNewState(ctxt);
+ if (to != NULL)
+ xmlRegStatePush(ctxt, to);
+ else {
+ return(-1);
+ }
+ }
+ xmlFAGenerateEpsilonTransition(ctxt, from, to);
+ ctxt->state = to;
+ xmlRegFreeAtom(atom);
+ return(0);
} else {
if (to == NULL) {
to = xmlRegNewState(ctxt);
@@ -1479,7 +1542,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
if (xmlRegAtomPush(ctxt, atom) < 0) {
return(-1);
}
- xmlRegStateAddTrans(ctxt, from, atom, to, -1, -1);
+ xmlRegStateAddTrans(ctxt, from, atom, to, -1, -1, 0);
ctxt->state = to;
}
switch (atom->quant) {
@@ -1490,11 +1553,11 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
case XML_REGEXP_QUANT_MULT:
atom->quant = XML_REGEXP_QUANT_ONCE;
xmlFAGenerateEpsilonTransition(ctxt, from, to);
- xmlRegStateAddTrans(ctxt, to, atom, to, -1, -1);
+ xmlRegStateAddTrans(ctxt, to, atom, to, -1, -1, 0);
break;
case XML_REGEXP_QUANT_PLUS:
atom->quant = XML_REGEXP_QUANT_ONCE;
- xmlRegStateAddTrans(ctxt, to, atom, to, -1, -1);
+ xmlRegStateAddTrans(ctxt, to, atom, to, -1, -1, 0);
break;
default:
break;
@@ -1538,6 +1601,8 @@ xmlFAReduceEpsilonTransitions(xmlRegParserCtxtPtr ctxt, int fromnr,
from->type = XML_REGEXP_FINAL_STATE;
}
for (transnr = 0;transnr < to->nbTrans;transnr++) {
+ if (to->trans[transnr].to < 0)
+ continue;
if (to->trans[transnr].atom == NULL) {
/*
* Don't remove counted transitions
@@ -1549,7 +1614,7 @@ xmlFAReduceEpsilonTransitions(xmlRegParserCtxtPtr ctxt, int fromnr,
xmlRegStateAddTrans(ctxt, from, NULL,
ctxt->states[newto],
- -1, to->trans[transnr].count);
+ -1, to->trans[transnr].count, 0);
} else {
#ifdef DEBUG_REGEXP_GRAPH
printf("Found epsilon trans %d from %d to %d\n",
@@ -1572,10 +1637,10 @@ xmlFAReduceEpsilonTransitions(xmlRegParserCtxtPtr ctxt, int fromnr,
if (to->trans[transnr].counter >= 0) {
xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom,
ctxt->states[newto],
- to->trans[transnr].counter, -1);
+ to->trans[transnr].counter, -1, 1);
} else {
xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom,
- ctxt->states[newto], counter, -1);
+ ctxt->states[newto], counter, -1, 1);
}
}
}
@@ -1583,6 +1648,89 @@ xmlFAReduceEpsilonTransitions(xmlRegParserCtxtPtr ctxt, int fromnr,
}
/**
+ * xmlFAEliminateSimpleEpsilonTransitions:
+ * @ctxt: a regexp parser context
+ *
+ * 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
+ * reduced to state elimination:
+ * - if there exists an epsilon from X to Y
+ * - if there is no other transition from X
+ * then X and Y are semantically equivalent and X can be eliminated
+ * If X is the start state then make Y the start state, else replace the
+ * target of all transitions to X by transitions to Y.
+ */
+static void
+xmlFAEliminateSimpleEpsilonTransitions(xmlRegParserCtxtPtr ctxt) {
+ int statenr, i, j, newto;
+ xmlRegStatePtr state, tmp;
+
+ for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
+ state = ctxt->states[statenr];
+ if (state == NULL)
+ continue;
+ if (state->nbTrans != 1)
+ continue;
+ /* is the only transition out a basic transition */
+ if ((state->trans[0].atom == NULL) &&
+ (state->trans[0].to >= 0) &&
+ (state->trans[0].to != statenr) &&
+ (state->trans[0].counter < 0) &&
+ (state->trans[0].count < 0)) {
+ newto = state->trans[0].to;
+
+ if (state->type == XML_REGEXP_START_STATE) {
+#ifdef DEBUG_REGEXP_GRAPH
+ printf("Found simple epsilon trans from start %d to %d\n",
+ statenr, newto);
+#endif
+ } else {
+#ifdef DEBUG_REGEXP_GRAPH
+ printf("Found simple epsilon trans from %d to %d\n",
+ statenr, newto);
+#endif
+ for (i = 0;i < state->nbTransTo;i++) {
+ tmp = ctxt->states[state->transTo[i]];
+ for (j = 0;j < tmp->nbTrans;j++) {
+ if (tmp->trans[j].to == statenr) {
+ tmp->trans[j].to = newto;
+#ifdef DEBUG_REGEXP_GRAPH
+ printf("Changed transition %d on %d to go to %d\n",
+ j, tmp->no, newto);
+#endif
+ xmlRegStateAddTransTo(ctxt, ctxt->states[newto],
+ tmp->no);
+ }
+ }
+ }
+#if 0
+ for (i = 0;i < ctxt->nbStates;i++) {
+ tmp = ctxt->states[i];
+ for (j = 0;j < tmp->nbTrans;j++) {
+ if (tmp->trans[j].to == statenr) {
+ tmp->trans[j].to = newto;
+#ifdef DEBUG_REGEXP_GRAPH
+ printf("Changed transition %d on %d to go to %d\n",
+ j, tmp->no, newto);
+#endif
+ }
+ }
+ }
+#endif
+ if (state->type == XML_REGEXP_FINAL_STATE)
+ ctxt->states[newto]->type = XML_REGEXP_FINAL_STATE;
+ /* eliminate the transition completely */
+ state->nbTrans = 0;
+
+
+ }
+
+ }
+ }
+}
+/**
* xmlFAEliminateEpsilonTransitions:
* @ctxt: a regexp parser context
*
@@ -1591,9 +1739,13 @@ static void
xmlFAEliminateEpsilonTransitions(xmlRegParserCtxtPtr ctxt) {
int statenr, transnr;
xmlRegStatePtr state;
+ int has_epsilon;
if (ctxt->states == NULL) return;
+ xmlFAEliminateSimpleEpsilonTransitions(ctxt);
+
+ has_epsilon = 0;
/*
* build the completed transitions bypassing the epsilons
@@ -1625,6 +1777,7 @@ xmlFAEliminateEpsilonTransitions(xmlRegParserCtxtPtr ctxt) {
transnr, statenr, newto);
#endif
state->mark = XML_REGEXP_MARK_START;
+ has_epsilon = 1;
xmlFAReduceEpsilonTransitions(ctxt, statenr,
newto, state->trans[transnr].counter);
state->mark = XML_REGEXP_MARK_NORMAL;
@@ -1640,15 +1793,18 @@ xmlFAEliminateEpsilonTransitions(xmlRegParserCtxtPtr ctxt) {
/*
* Eliminate the epsilon transitions
*/
- for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
- state = ctxt->states[statenr];
- if (state == NULL)
- continue;
- for (transnr = 0;transnr < state->nbTrans;transnr++) {
- if ((state->trans[transnr].atom == NULL) &&
- (state->trans[transnr].count < 0) &&
- (state->trans[transnr].to >= 0)) {
- state->trans[transnr].to = -1;
+ if (has_epsilon) {
+ for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
+ state = ctxt->states[statenr];
+ if (state == NULL)
+ continue;
+ for (transnr = 0;transnr < state->nbTrans;transnr++) {
+ xmlRegTransPtr trans = &(state->trans[transnr]);
+ if ((trans->atom == NULL) &&
+ (trans->count < 0) &&
+ (trans->to >= 0)) {
+ trans->to = -1;
+ }
}
}
}
@@ -1724,6 +1880,8 @@ xmlFAEliminateEpsilonTransitions(xmlRegParserCtxtPtr ctxt) {
*/
static int
xmlFACompareAtoms(xmlRegAtomPtr atom1, xmlRegAtomPtr atom2) {
+ int ret;
+
if (atom1 == atom2)
return(1);
if ((atom1 == NULL) || (atom2 == NULL))
@@ -1733,19 +1891,24 @@ xmlFACompareAtoms(xmlRegAtomPtr atom1, xmlRegAtomPtr atom2) {
return(0);
switch (atom1->type) {
case XML_REGEXP_STRING:
- return(xmlStrEqual((xmlChar *)atom1->valuep,
- (xmlChar *)atom2->valuep));
+ ret = xmlRegStrEqualWildcard((xmlChar *)atom1->valuep,
+ (xmlChar *)atom2->valuep);
+ break;
case XML_REGEXP_EPSILON:
return(1);
case XML_REGEXP_CHARVAL:
- return(atom1->codepoint == atom2->codepoint);
+ ret = atom1->codepoint == atom2->codepoint;
+ break;
case XML_REGEXP_RANGES:
TODO;
return(0);
default:
- break;
+ return(1);
}
- return(1);
+ if (atom1->neg != atom2->neg) {
+ ret = !ret;
+ }
+ return(ret);
}
/**
@@ -1818,6 +1981,8 @@ xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt) {
state = ctxt->states[statenr];
if (state == NULL)
continue;
+ if (state->nbTrans < 2)
+ continue;
for (transnr = 0;transnr < state->nbTrans;transnr++) {
t1 = &(state->trans[transnr]);
/*
@@ -2420,6 +2585,14 @@ xmlFARegExec(xmlRegexpPtr comp, const xmlChar *content) {
#endif
exec->counts[trans->counter]++;
}
+ if ((trans->count >= 0) &&
+ (trans->count < REGEXP_ALL_COUNTER)) {
+#ifdef DEBUG_REGEXP_EXEC
+ printf("resetting count %d on transition\n",
+ trans->count);
+#endif
+ exec->counts[trans->count] = 0;
+ }
#ifdef DEBUG_REGEXP_EXEC
printf("entering state %d\n", trans->to);
#endif
@@ -2633,6 +2806,14 @@ xmlRegStrEqualWildcard(const xmlChar *expStr, const xmlChar *valStr) {
* Eval if we have a wildcard for the current item.
*/
if (*expStr != *valStr) {
+ /* if one of them starts with a wildcard make valStr be it */
+ if (*valStr == '*') {
+ const xmlChar *tmp;
+
+ tmp = valStr;
+ valStr = expStr;
+ expStr = tmp;
+ }
if ((*valStr != 0) && (*expStr != 0) && (*expStr++ == '*')) {
do {
if (*valStr == XML_REG_STRING_SEPARATOR)
@@ -2736,19 +2917,20 @@ error:
}
/**
- * xmlRegExecPushString:
+ * xmlRegExecPushStringInternal:
* @exec: a regexp execution context or NULL to indicate the end
* @value: a string token input
* @data: data associated to the token to reuse in callbacks
+ * @compound: value was assembled from 2 strings
*
* Push one input token in the execution context
*
* Returns: 1 if the regexp reached a final state, 0 if non-final, and
* a negative value in case of error.
*/
-int
-xmlRegExecPushString(xmlRegExecCtxtPtr exec, const xmlChar *value,
- void *data) {
+static int
+xmlRegExecPushStringInternal(xmlRegExecCtxtPtr exec, const xmlChar *value,
+ void *data, int compound) {
xmlRegTransPtr trans;
xmlRegAtomPtr atom;
int ret;
@@ -2890,6 +3072,11 @@ xmlRegExecPushString(xmlRegExecCtxtPtr exec, const xmlChar *value,
break;
} else if (value != NULL) {
ret = xmlRegStrEqualWildcard(atom->valuep, value);
+ if (atom->neg) {
+ ret = !ret;
+ if (!compound)
+ ret = 0;
+ }
if ((ret == 1) && (trans->counter >= 0)) {
xmlRegCounterPtr counter;
int count;
@@ -2985,6 +3172,14 @@ xmlRegExecPushString(xmlRegExecCtxtPtr exec, const xmlChar *value,
#endif
exec->counts[trans->counter]++;
}
+ if ((trans->count >= 0) &&
+ (trans->count < REGEXP_ALL_COUNTER)) {
+#ifdef DEBUG_REGEXP_EXEC
+ printf("resetting count %d on transition\n",
+ trans->count);
+#endif
+ exec->counts[trans->count] = 0;
+ }
#ifdef DEBUG_PUSH
printf("entering state %d\n", trans->to);
#endif
@@ -3081,6 +3276,23 @@ progress:
}
/**
+ * xmlRegExecPushString:
+ * @exec: a regexp execution context or NULL to indicate the end
+ * @value: a string token input
+ * @data: data associated to the token to reuse in callbacks
+ *
+ * Push one input token in the execution context
+ *
+ * Returns: 1 if the regexp reached a final state, 0 if non-final, and
+ * a negative value in case of error.
+ */
+int
+xmlRegExecPushString(xmlRegExecCtxtPtr exec, const xmlChar *value,
+ void *data) {
+ return(xmlRegExecPushStringInternal(exec, value, data, 0));
+}
+
+/**
* xmlRegExecPushString2:
* @exec: a regexp execution context or NULL to indicate the end
* @value: the first string token input
@@ -3129,7 +3341,7 @@ xmlRegExecPushString2(xmlRegExecCtxtPtr exec, const xmlChar *value,
if (exec->comp->compact != NULL)
ret = xmlRegCompactPushString(exec, exec->comp, str, data);
else
- ret = xmlRegExecPushString(exec, str, data);
+ ret = xmlRegExecPushStringInternal(exec, str, data, 1);
if (str != buf)
xmlFree(buf);
@@ -3137,7 +3349,7 @@ xmlRegExecPushString2(xmlRegExecCtxtPtr exec, const xmlChar *value,
}
/**
- * xmlRegExecGetalues:
+ * xmlRegExecGetValues:
* @exec: a regexp execution context
* @err: error extraction or normal one
* @nbval: pointer to the number of accepted values IN/OUT
@@ -3246,14 +3458,20 @@ xmlRegExecGetValues(xmlRegExecCtxtPtr exec, int err,
count = exec->counts[trans->counter];
counter = &exec->comp->counters[trans->counter];
if (count < counter->max) {
- values[nb++] = (xmlChar *) atom->valuep;
+ if (atom->neg)
+ values[nb++] = (xmlChar *) atom->valuep2;
+ else
+ values[nb++] = (xmlChar *) atom->valuep;
(*nbval)++;
}
} else {
if ((exec->comp->states[trans->to] != NULL) &&
(exec->comp->states[trans->to]->type !=
XML_REGEXP_SINK_STATE)) {
- values[nb++] = (xmlChar *) atom->valuep;
+ if (atom->neg)
+ values[nb++] = (xmlChar *) atom->valuep2;
+ else
+ values[nb++] = (xmlChar *) atom->valuep;
(*nbval)++;
}
}
@@ -3277,7 +3495,10 @@ xmlRegExecGetValues(xmlRegExecCtxtPtr exec, int err,
if ((exec->comp->states[trans->to] != NULL) &&
(exec->comp->states[trans->to]->type ==
XML_REGEXP_SINK_STATE)) {
- values[nb++] = (xmlChar *) atom->valuep;
+ if (atom->neg)
+ values[nb++] = (xmlChar *) atom->valuep2;
+ else
+ values[nb++] = (xmlChar *) atom->valuep;
(*nbneg)++;
}
}
@@ -3815,8 +4036,21 @@ xmlFAParseCharClassEsc(xmlRegParserCtxtPtr ctxt) {
(cur == 0x5E)) {
if (ctxt->atom == NULL) {
ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_CHARVAL);
- if (ctxt->atom != NULL)
- ctxt->atom->codepoint = cur;
+ if (ctxt->atom != NULL) {
+ switch (cur) {
+ case 'n':
+ ctxt->atom->codepoint = '\n';
+ break;
+ case 'r':
+ ctxt->atom->codepoint = '\r';
+ break;
+ case 't':
+ ctxt->atom->codepoint = '\t';
+ break;
+ default:
+ ctxt->atom->codepoint = cur;
+ }
+ }
} else if (ctxt->atom->type == XML_REGEXP_RANGES) {
xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
XML_REGEXP_CHARVAL, cur, cur, NULL);
@@ -4550,6 +4784,7 @@ xmlNewAutomata(void) {
/* initialize the parser */
ctxt->end = NULL;
ctxt->start = ctxt->state = xmlRegNewState(ctxt);
+ ctxt->start->type = XML_REGEXP_START_STATE;
if (ctxt->start == NULL) {
xmlFreeAutomata(ctxt);
return(NULL);
@@ -4706,6 +4941,72 @@ xmlAutomataNewTransition2(xmlAutomataPtr am, xmlAutomataStatePtr from,
}
/**
+ * xmlAutomataNewNegTrans:
+ * @am: an automata
+ * @from: the starting point of the transition
+ * @to: the target point of the transition or NULL
+ * @token: the first input string associated to that transition
+ * @token2: the second input string associated to that transition
+ * @data: data passed to the callback function if the transition is activated
+ *
+ * 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 any value except (@token,@token2)
+ * Note that if @token2 is not NULL, then (X, NULL) won't match to follow
+ # the semantic of XSD ##other
+ *
+ * Returns the target state or NULL in case of error
+ */
+xmlAutomataStatePtr
+xmlAutomataNewNegTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
+ xmlAutomataStatePtr to, const xmlChar *token,
+ const xmlChar *token2, void *data) {
+ xmlRegAtomPtr atom;
+ xmlChar err_msg[200];
+
+ if ((am == NULL) || (from == NULL) || (token == NULL))
+ return(NULL);
+ atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
+ if (atom == NULL)
+ return(NULL);
+ atom->data = data;
+ atom->neg = 1;
+ if ((token2 == NULL) || (*token2 == 0)) {
+ atom->valuep = xmlStrdup(token);
+ } else {
+ int lenn, lenp;
+ xmlChar *str;
+
+ lenn = strlen((char *) token2);
+ lenp = strlen((char *) token);
+
+ str = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
+ if (str == NULL) {
+ xmlRegFreeAtom(atom);
+ return(NULL);
+ }
+ memcpy(&str[0], token, lenp);
+ str[lenp] = '|';
+ memcpy(&str[lenp + 1], token2, lenn);
+ str[lenn + lenp + 1] = 0;
+
+ atom->valuep = str;
+ }
+ snprintf((char *) err_msg, 199, "not %s", (const char *) atom->valuep);
+ err_msg[199] = 0;
+ atom->valuep2 = xmlStrdup(err_msg);
+
+ if (xmlFAGenerateTransitions(am, from, to, atom) < 0) {
+ xmlRegFreeAtom(atom);
+ return(NULL);
+ }
+ am->negs++;
+ if (to == NULL)
+ return(am->state);
+ return(to);
+}
+
+/**
* xmlAutomataNewCountTrans2:
* @am: an automata
* @from: the starting point of the transition
@@ -4780,7 +5081,7 @@ xmlAutomataNewCountTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from,
to = xmlRegNewState(am);
xmlRegStatePush(am, to);
}
- xmlRegStateAddTrans(am, from, atom, to, counter, -1);
+ xmlRegStateAddTrans(am, from, atom, to, counter, -1, 0);
xmlRegAtomPush(am, atom);
am->state = to;
@@ -4846,7 +5147,7 @@ xmlAutomataNewCountTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
to = xmlRegNewState(am);
xmlRegStatePush(am, to);
}
- xmlRegStateAddTrans(am, from, atom, to, counter, -1);
+ xmlRegStateAddTrans(am, from, atom, to, counter, -1, 0);
xmlRegAtomPush(am, atom);
am->state = to;
@@ -4935,7 +5236,7 @@ xmlAutomataNewOnceTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from,
to = xmlRegNewState(am);
xmlRegStatePush(am, to);
}
- xmlRegStateAddTrans(am, from, atom, to, counter, -1);
+ xmlRegStateAddTrans(am, from, atom, to, counter, -1, 0);
xmlRegAtomPush(am, atom);
am->state = to;
return(to);
@@ -4997,7 +5298,7 @@ xmlAutomataNewOnceTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
to = xmlRegNewState(am);
xmlRegStatePush(am, to);
}
- xmlRegStateAddTrans(am, from, atom, to, counter, -1);
+ xmlRegStateAddTrans(am, from, atom, to, counter, -1, 0);
xmlRegAtomPush(am, atom);
am->state = to;
return(to);
@@ -5183,6 +5484,1844 @@ xmlAutomataIsDeterminist(xmlAutomataPtr am) {
return(ret);
}
#endif /* LIBXML_AUTOMATA_ENABLED */
+
+#ifdef LIBXML_EXPR_ENABLED
+/************************************************************************
+ * *
+ * Formal Expression handling code *
+ * *
+ ************************************************************************/
+/************************************************************************
+ * *
+ * Expression handling context *
+ * *
+ ************************************************************************/
+
+struct _xmlExpCtxt {
+ xmlDictPtr dict;
+ xmlExpNodePtr *table;
+ int size;
+ int nbElems;
+ int nb_nodes;
+ const char *expr;
+ const char *cur;
+ int nb_cons;
+ int tabSize;
+};
+
+/**
+ * xmlExpNewCtxt:
+ * @maxNodes: the maximum number of nodes
+ * @dict: optional dictionnary to use internally
+ *
+ * Creates a new context for manipulating expressions
+ *
+ * Returns the context or NULL in case of error
+ */
+xmlExpCtxtPtr
+xmlExpNewCtxt(int maxNodes, xmlDictPtr dict) {
+ xmlExpCtxtPtr ret;
+ int size = 256;
+
+ if (maxNodes <= 4096)
+ maxNodes = 4096;
+
+ ret = (xmlExpCtxtPtr) xmlMalloc(sizeof(xmlExpCtxt));
+ if (ret == NULL)
+ return(NULL);
+ memset(ret, 0, sizeof(xmlExpCtxt));
+ ret->size = size;
+ ret->nbElems = 0;
+ ret->table = xmlMalloc(size * sizeof(xmlExpNodePtr));
+ if (ret->table == NULL) {
+ xmlFree(ret);
+ return(NULL);
+ }
+ memset(ret->table, 0, size * sizeof(xmlExpNodePtr));
+ if (dict == NULL) {
+ ret->dict = xmlDictCreate();
+ if (ret->dict == NULL) {
+ xmlFree(ret->table);
+ xmlFree(ret);
+ return(NULL);
+ }
+ } else {
+ ret->dict = dict;
+ xmlDictReference(ret->dict);
+ }
+ return(ret);
+}
+
+/**
+ * xmlExpFreeCtxt:
+ * @ctxt: an expression context
+ *
+ * Free an expression context
+ */
+void
+xmlExpFreeCtxt(xmlExpCtxtPtr ctxt) {
+ if (ctxt == NULL)
+ return;
+ xmlDictFree(ctxt->dict);
+ if (ctxt->table != NULL)
+ xmlFree(ctxt->table);
+ xmlFree(ctxt);
+}
+
+/************************************************************************
+ * *
+ * Structure associated to an expression node *
+ * *
+ ************************************************************************/
+#define MAX_NODES 10000
+
+/* #define DEBUG_DERIV */
+
+/*
+ * TODO:
+ * - Wildcards
+ * - public API for creation
+ *
+ * Started
+ * - regression testing
+ *
+ * Done
+ * - split into module and test tool
+ * - memleaks
+ */
+
+typedef enum {
+ XML_EXP_NILABLE = (1 << 0)
+} xmlExpNodeInfo;
+
+#define IS_NILLABLE(node) ((node)->info & XML_EXP_NILABLE)
+
+struct _xmlExpNode {
+ unsigned char type;/* xmlExpNodeType */
+ unsigned char info;/* OR of xmlExpNodeInfo */
+ unsigned short key; /* the hash key */
+ unsigned int ref; /* The number of references */
+ int c_max; /* the maximum length it can consume */
+ xmlExpNodePtr exp_left;
+ xmlExpNodePtr next;/* the next node in the hash table or free list */
+ union {
+ struct {
+ int f_min;
+ int f_max;
+ } count;
+ struct {
+ xmlExpNodePtr f_right;
+ } children;
+ const xmlChar *f_str;
+ } field;
+};
+
+#define exp_min field.count.f_min
+#define exp_max field.count.f_max
+/* #define exp_left field.children.f_left */
+#define exp_right field.children.f_right
+#define exp_str field.f_str
+
+static xmlExpNodePtr xmlExpNewNode(xmlExpCtxtPtr ctxt, xmlExpNodeType type);
+static xmlExpNode forbiddenExpNode = {
+ XML_EXP_FORBID, 0, 0, 0, 0, NULL, NULL, {{ 0, 0}}
+};
+xmlExpNodePtr forbiddenExp = &forbiddenExpNode;
+static xmlExpNode emptyExpNode = {
+ XML_EXP_EMPTY, 1, 0, 0, 0, NULL, NULL, {{ 0, 0}}
+};
+xmlExpNodePtr emptyExp = &emptyExpNode;
+
+/************************************************************************
+ * *
+ * The custom hash table for unicity and canonicalization *
+ * of sub-expressions pointers *
+ * *
+ ************************************************************************/
+/*
+ * xmlExpHashNameComputeKey:
+ * Calculate the hash key for a token
+ */
+static unsigned short
+xmlExpHashNameComputeKey(const xmlChar *name) {
+ unsigned short value = 0L;
+ char ch;
+
+ if (name != NULL) {
+ value += 30 * (*name);
+ while ((ch = *name++) != 0) {
+ value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
+ }
+ }
+ return (value);
+}
+
+/*
+ * xmlExpHashComputeKey:
+ * Calculate the hash key for a compound expression
+ */
+static unsigned short
+xmlExpHashComputeKey(xmlExpNodeType type, xmlExpNodePtr left,
+ xmlExpNodePtr right) {
+ unsigned long value;
+ unsigned short ret;
+
+ switch (type) {
+ case XML_EXP_SEQ:
+ value = left->key;
+ value += right->key;
+ value *= 3;
+ ret = (unsigned short) value;
+ break;
+ case XML_EXP_OR:
+ value = left->key;
+ value += right->key;
+ value *= 7;
+ ret = (unsigned short) value;
+ break;
+ case XML_EXP_COUNT:
+ value = left->key;
+ value += right->key;
+ ret = (unsigned short) value;
+ break;
+ default:
+ ret = 0;
+ }
+ return(ret);
+}
+
+
+static xmlExpNodePtr
+xmlExpNewNode(xmlExpCtxtPtr ctxt, xmlExpNodeType type) {
+ xmlExpNodePtr ret;
+
+ if (ctxt->nb_nodes >= MAX_NODES)
+ return(NULL);
+ ret = (xmlExpNodePtr) xmlMalloc(sizeof(xmlExpNode));
+ if (ret == NULL)
+ return(NULL);
+ memset(ret, 0, sizeof(xmlExpNode));
+ ret->type = type;
+ ret->next = NULL;
+ ctxt->nb_nodes++;
+ ctxt->nb_cons++;
+ return(ret);
+}
+
+/**
+ * xmlExpHashGetEntry:
+ * @table: the hash table
+ *
+ * Get the unique entry from the hash table. The entry is created if
+ * needed. @left and @right are consumed, i.e. their ref count will
+ * be decremented by the operation.
+ *
+ * Returns the pointer or NULL in case of error
+ */
+static xmlExpNodePtr
+xmlExpHashGetEntry(xmlExpCtxtPtr ctxt, xmlExpNodeType type,
+ xmlExpNodePtr left, xmlExpNodePtr right,
+ const xmlChar *name, int min, int max) {
+ unsigned short kbase, key;
+ xmlExpNodePtr entry;
+ xmlExpNodePtr insert;
+
+ if (ctxt == NULL)
+ return(NULL);
+
+ /*
+ * Check for duplicate and insertion location.
+ */
+ if (type == XML_EXP_ATOM) {
+ kbase = xmlExpHashNameComputeKey(name);
+ } else if (type == XML_EXP_COUNT) {
+ /* COUNT reduction rule 1 */
+ /* a{1} -> a */
+ if (min == max) {
+ if (min == 1) {
+ return(left);
+ }
+ if (min == 0) {
+ xmlExpFree(ctxt, left);
+ return(emptyExp);
+ }
+ }
+ if (min < 0) {
+ xmlExpFree(ctxt, left);
+ return(forbiddenExp);
+ }
+ if (max == -1)
+ kbase = min + 79;
+ else
+ kbase = max - min;
+ kbase += left->key;
+ } else if (type == XML_EXP_OR) {
+ /* Forbid reduction rules */
+ if (left->type == XML_EXP_FORBID) {
+ xmlExpFree(ctxt, left);
+ return(right);
+ }
+ if (right->type == XML_EXP_FORBID) {
+ xmlExpFree(ctxt, right);
+ return(left);
+ }
+
+ /* OR reduction rule 1 */
+ /* a | a reduced to a */
+ if (left == right) {
+ left->ref--;
+ return(left);
+ }
+ /* OR canonicalization rule 1 */
+ /* linearize (a | b) | c into a | (b | c) */
+ if ((left->type == XML_EXP_OR) && (right->type != XML_EXP_OR)) {
+ xmlExpNodePtr tmp = left;
+ left = right;
+ right = tmp;
+ }
+ /* OR reduction rule 2 */
+ /* a | (a | b) and b | (a | b) are reduced to a | b */
+ if (right->type == XML_EXP_OR) {
+ if ((left == right->exp_left) ||
+ (left == right->exp_right)) {
+ xmlExpFree(ctxt, left);
+ return(right);
+ }
+ }
+ /* OR canonicalization rule 2 */
+ /* linearize (a | b) | c into a | (b | c) */
+ if (left->type == XML_EXP_OR) {
+ xmlExpNodePtr tmp;
+
+ /* OR canonicalization rule 2 */
+ if ((left->exp_right->type != XML_EXP_OR) &&
+ (left->exp_right->key < left->exp_left->key)) {
+ tmp = left->exp_right;
+ left->exp_right = left->exp_left;
+ left->exp_left = tmp;
+ }
+ left->exp_right->ref++;
+ tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, left->exp_right, right,
+ NULL, 0, 0);
+ left->exp_left->ref++;
+ tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, left->exp_left, tmp,
+ NULL, 0, 0);
+
+ xmlExpFree(ctxt, left);
+ return(tmp);
+ }
+ if (right->type == XML_EXP_OR) {
+ /* Ordering in the tree */
+ /* C | (A | B) -> A | (B | C) */
+ if (left->key > right->exp_right->key) {
+ xmlExpNodePtr tmp;
+ right->exp_right->ref++;
+ tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, right->exp_right,
+ left, NULL, 0, 0);
+ right->exp_left->ref++;
+ tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, right->exp_left,
+ tmp, NULL, 0, 0);
+ xmlExpFree(ctxt, right);
+ return(tmp);
+ }
+ /* Ordering in the tree */
+ /* B | (A | C) -> A | (B | C) */
+ if (left->key > right->exp_left->key) {
+ xmlExpNodePtr tmp;
+ right->exp_right->ref++;
+ tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, left,
+ right->exp_right, NULL, 0, 0);
+ right->exp_left->ref++;
+ tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, right->exp_left,
+ tmp, NULL, 0, 0);
+ xmlExpFree(ctxt, right);
+ return(tmp);
+ }
+ }
+ /* we know both types are != XML_EXP_OR here */
+ else if (left->key > right->key) {
+ xmlExpNodePtr tmp = left;
+ left = right;
+ right = tmp;
+ }
+ kbase = xmlExpHashComputeKey(type, left, right);
+ } else if (type == XML_EXP_SEQ) {
+ /* Forbid reduction rules */
+ if (left->type == XML_EXP_FORBID) {
+ xmlExpFree(ctxt, right);
+ return(left);
+ }
+ if (right->type == XML_EXP_FORBID) {
+ xmlExpFree(ctxt, left);
+ return(right);
+ }
+ /* Empty reduction rules */
+ if (right->type == XML_EXP_EMPTY) {
+ return(left);
+ }
+ if (left->type == XML_EXP_EMPTY) {
+ return(right);
+ }
+ kbase = xmlExpHashComputeKey(type, left, right);
+ } else
+ return(NULL);
+
+ key = kbase % ctxt->size;
+ if (ctxt->table[key] != NULL) {
+ for (insert = ctxt->table[key]; insert != NULL;
+ insert = insert->next) {
+ if ((insert->key == kbase) &&
+ (insert->type == type)) {
+ if (type == XML_EXP_ATOM) {
+ if (name == insert->exp_str) {
+ insert->ref++;
+ return(insert);
+ }
+ } else if (type == XML_EXP_COUNT) {
+ if ((insert->exp_min == min) && (insert->exp_max == max) &&
+ (insert->exp_left == left)) {
+ insert->ref++;
+ left->ref--;
+ return(insert);
+ }
+ } else if ((insert->exp_left == left) &&
+ (insert->exp_right == right)) {
+ insert->ref++;
+ left->ref--;
+ right->ref--;
+ return(insert);
+ }
+ }
+ }
+ }
+
+ entry = xmlExpNewNode(ctxt, type);
+ if (entry == NULL)
+ return(NULL);
+ entry->key = kbase;
+ if (type == XML_EXP_ATOM) {
+ entry->exp_str = name;
+ entry->c_max = 1;
+ } else if (type == XML_EXP_COUNT) {
+ entry->exp_min = min;
+ entry->exp_max = max;
+ entry->exp_left = left;
+ if ((min == 0) || (IS_NILLABLE(left)))
+ entry->info |= XML_EXP_NILABLE;
+ if (max < 0)
+ entry->c_max = -1;
+ else
+ entry->c_max = max * entry->exp_left->c_max;
+ } else {
+ entry->exp_left = left;
+ entry->exp_right = right;
+ if (type == XML_EXP_OR) {
+ if ((IS_NILLABLE(left)) || (IS_NILLABLE(right)))
+ entry->info |= XML_EXP_NILABLE;
+ if ((entry->exp_left->c_max == -1) ||
+ (entry->exp_right->c_max == -1))
+ entry->c_max = -1;
+ else if (entry->exp_left->c_max > entry->exp_right->c_max)
+ entry->c_max = entry->exp_left->c_max;
+ else
+ entry->c_max = entry->exp_right->c_max;
+ } else {
+ if ((IS_NILLABLE(left)) && (IS_NILLABLE(right)))
+ entry->info |= XML_EXP_NILABLE;
+ if ((entry->exp_left->c_max == -1) ||
+ (entry->exp_right->c_max == -1))
+ entry->c_max = -1;
+ else
+ entry->c_max = entry->exp_left->c_max + entry->exp_right->c_max;
+ }
+ }
+ entry->ref = 1;
+ if (ctxt->table[key] != NULL)
+ entry->next = ctxt->table[key];
+
+ ctxt->table[key] = entry;
+ ctxt->nbElems++;
+
+ return(entry);
+}
+
+/**
+ * xmlExpFree:
+ * @ctxt: the expression context
+ * @exp: the expression
+ *
+ * Dereference the expression
+ */
+void
+xmlExpFree(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp) {
+ if ((exp == NULL) || (exp == forbiddenExp) || (exp == emptyExp))
+ return;
+ exp->ref--;
+ if (exp->ref == 0) {
+ unsigned short key;
+
+ /* Unlink it first from the hash table */
+ key = exp->key % ctxt->size;
+ if (ctxt->table[key] == exp) {
+ ctxt->table[key] = exp->next;
+ } else {
+ xmlExpNodePtr tmp;
+
+ tmp = ctxt->table[key];
+ while (tmp != NULL) {
+ if (tmp->next == exp) {
+ tmp->next = exp->next;
+ break;
+ }
+ tmp = tmp->next;
+ }
+ }
+
+ if ((exp->type == XML_EXP_SEQ) || (exp->type == XML_EXP_OR)) {
+ xmlExpFree(ctxt, exp->exp_left);
+ xmlExpFree(ctxt, exp->exp_right);
+ } else if (exp->type == XML_EXP_COUNT) {
+ xmlExpFree(ctxt, exp->exp_left);
+ }
+ xmlFree(exp);
+ ctxt->nb_nodes--;
+ }
+}
+
+/**
+ * xmlExpRef:
+ * @exp: the expression
+ *
+ * Increase the reference count of the expression
+ */
+void
+xmlExpRef(xmlExpNodePtr exp) {
+ if (exp != NULL)
+ exp->ref++;
+}
+
+/**
+ * xmlExpNewAtom:
+ * @ctxt: the expression context
+ * @name: the atom name
+ * @len: the atom name lenght in byte (or -1);
+ *
+ * Get the atom associated to this name from that context
+ *
+ * Returns the node or NULL in case of error
+ */
+xmlExpNodePtr
+xmlExpNewAtom(xmlExpCtxtPtr ctxt, const xmlChar *name, int len) {
+ if ((ctxt == NULL) || (name == NULL))
+ return(NULL);
+ name = xmlDictLookup(ctxt->dict, name, len);
+ if (name == NULL)
+ return(NULL);
+ return(xmlExpHashGetEntry(ctxt, XML_EXP_ATOM, NULL, NULL, name, 0, 0));
+}
+
+/**
+ * xmlExpNewOr:
+ * @ctxt: the expression context
+ * @left: left expression
+ * @right: right expression
+ *
+ * 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).
+ *
+ * Returns the node or NULL in case of error
+ */
+xmlExpNodePtr
+xmlExpNewOr(xmlExpCtxtPtr ctxt, xmlExpNodePtr left, xmlExpNodePtr right) {
+ if ((ctxt == NULL) || (left == NULL) || (right == NULL)) {
+ xmlExpFree(ctxt, left);
+ xmlExpFree(ctxt, right);
+ return(NULL);
+ }
+ return(xmlExpHashGetEntry(ctxt, XML_EXP_OR, left, right, NULL, 0, 0));
+}
+
+/**
+ * xmlExpNewSeq:
+ * @ctxt: the expression context
+ * @left: left expression
+ * @right: right expression
+ *
+ * Get the atom associated to the sequence @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).
+ *
+ * Returns the node or NULL in case of error
+ */
+xmlExpNodePtr
+xmlExpNewSeq(xmlExpCtxtPtr ctxt, xmlExpNodePtr left, xmlExpNodePtr right) {
+ if ((ctxt == NULL) || (left == NULL) || (right == NULL)) {
+ xmlExpFree(ctxt, left);
+ xmlExpFree(ctxt, right);
+ return(NULL);
+ }
+ return(xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, left, right, NULL, 0, 0));
+}
+
+/**
+ * xmlExpNewRange:
+ * @ctxt: the expression context
+ * @subset: the expression to be repeated
+ * @min: the lower bound for the repetition
+ * @max: the upper bound for the repetition, -1 means infinite
+ *
+ * Get the atom associated to the range (@subset){@min, @max}
+ * Note that @subset is consumed in the operation, to keep
+ * an handle on it use xmlExpRef() and use xmlExpFree() to release it,
+ * this is true even in case of failure (unless ctxt == NULL).
+ *
+ * Returns the node or NULL in case of error
+ */
+xmlExpNodePtr
+xmlExpNewRange(xmlExpCtxtPtr ctxt, xmlExpNodePtr subset, int min, int max) {
+ if ((ctxt == NULL) || (subset == NULL) || (min < 0) || (max < -1) ||
+ ((max >= 0) && (min > max))) {
+ xmlExpFree(ctxt, subset);
+ return(NULL);
+ }
+ return(xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, subset,
+ NULL, NULL, min, max));
+}
+
+/************************************************************************
+ * *
+ * Public API for operations on expressions *
+ * *
+ ************************************************************************/
+
+static int
+xmlExpGetLanguageInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
+ const xmlChar**list, int len, int nb) {
+ int tmp, tmp2;
+tail:
+ switch (exp->type) {
+ case XML_EXP_EMPTY:
+ return(0);
+ case XML_EXP_ATOM:
+ for (tmp = 0;tmp < nb;tmp++)
+ if (list[tmp] == exp->exp_str)
+ return(0);
+ if (nb >= len)
+ return(-2);
+ list[nb++] = exp->exp_str;
+ return(1);
+ case XML_EXP_COUNT:
+ exp = exp->exp_left;
+ goto tail;
+ case XML_EXP_SEQ:
+ case XML_EXP_OR:
+ tmp = xmlExpGetLanguageInt(ctxt, exp->exp_left, list, len, nb);
+ if (tmp < 0)
+ return(tmp);
+ tmp2 = xmlExpGetLanguageInt(ctxt, exp->exp_right, list, len,
+ nb + tmp);
+ if (tmp2 < 0)
+ return(tmp2);
+ return(tmp + tmp2);
+ }
+ return(-1);
+}
+
+/**
+ * xmlExpGetLanguage:
+ * @ctxt: the expression context
+ * @exp: the expression
+ * @list: where to store the tokens
+ * @len: the allocated lenght of @list
+ *
+ * Find all the strings used in @exp and store them in @list
+ *
+ * Returns the number of unique strings found, -1 in case of errors and
+ * -2 if there is more than @len strings
+ */
+int
+xmlExpGetLanguage(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
+ const xmlChar**list, int len) {
+ if ((ctxt == NULL) || (exp == NULL) || (list == NULL) || (len <= 0))
+ return(-1);
+ return(xmlExpGetLanguageInt(ctxt, exp, list, len, 0));
+}
+
+static int
+xmlExpGetStartInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
+ const xmlChar**list, int len, int nb) {
+ int tmp, tmp2;
+tail:
+ switch (exp->type) {
+ case XML_EXP_FORBID:
+ return(0);
+ case XML_EXP_EMPTY:
+ return(0);
+ case XML_EXP_ATOM:
+ for (tmp = 0;tmp < nb;tmp++)
+ if (list[tmp] == exp->exp_str)
+ return(0);
+ if (nb >= len)
+ return(-2);
+ list[nb++] = exp->exp_str;
+ return(1);
+ case XML_EXP_COUNT:
+ exp = exp->exp_left;
+ goto tail;
+ case XML_EXP_SEQ:
+ tmp = xmlExpGetStartInt(ctxt, exp->exp_left, list, len, nb);
+ if (tmp < 0)
+ return(tmp);
+ if (IS_NILLABLE(exp->exp_left)) {
+ tmp2 = xmlExpGetStartInt(ctxt, exp->exp_right, list, len,
+ nb + tmp);
+ if (tmp2 < 0)
+ return(tmp2);
+ tmp += tmp2;
+ }
+ return(tmp);
+ case XML_EXP_OR:
+ tmp = xmlExpGetStartInt(ctxt, exp->exp_left, list, len, nb);
+ if (tmp < 0)
+ return(tmp);
+ tmp2 = xmlExpGetStartInt(ctxt, exp->exp_right, list, len,
+ nb + tmp);
+ if (tmp2 < 0)
+ return(tmp2);
+ return(tmp + tmp2);
+ }
+ return(-1);
+}
+
+/**
+ * xmlExpGetStart:
+ * @ctxt: the expression context
+ * @exp: the expression
+ * @list: where to store the tokens
+ * @len: the allocated lenght 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
+ * it will return the list [a, c]
+ *
+ * Returns the number of unique strings found, -1 in case of errors and
+ * -2 if there is more than @len strings
+ */
+int
+xmlExpGetStart(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
+ const xmlChar**list, int len) {
+ if ((ctxt == NULL) || (exp == NULL) || (list == NULL) || (len <= 0))
+ return(-1);
+ return(xmlExpGetStartInt(ctxt, exp, list, len, 0));
+}
+
+/**
+ * xmlExpIsNillable:
+ * @exp: the expression
+ *
+ * Finds if the expression is nillable, i.e. if it accepts the empty sequqnce
+ *
+ * Returns 1 if nillable, 0 if not and -1 in case of error
+ */
+int
+xmlExpIsNillable(xmlExpNodePtr exp) {
+ if (exp == NULL)
+ return(-1);
+ return(IS_NILLABLE(exp) != 0);
+}
+
+static xmlExpNodePtr
+xmlExpStringDeriveInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, const xmlChar *str)
+{
+ xmlExpNodePtr ret;
+
+ switch (exp->type) {
+ case XML_EXP_EMPTY:
+ return(forbiddenExp);
+ case XML_EXP_FORBID:
+ return(forbiddenExp);
+ case XML_EXP_ATOM:
+ if (exp->exp_str == str) {
+#ifdef DEBUG_DERIV
+ printf("deriv atom: equal => Empty\n");
+#endif
+ ret = emptyExp;
+ } else {
+#ifdef DEBUG_DERIV
+ printf("deriv atom: mismatch => forbid\n");
+#endif
+ /* TODO wildcards here */
+ ret = forbiddenExp;
+ }
+ return(ret);
+ case XML_EXP_OR: {
+ xmlExpNodePtr tmp;
+
+#ifdef DEBUG_DERIV
+ printf("deriv or: => or(derivs)\n");
+#endif
+ tmp = xmlExpStringDeriveInt(ctxt, exp->exp_left, str);
+ if (tmp == NULL) {
+ return(NULL);
+ }
+ ret = xmlExpStringDeriveInt(ctxt, exp->exp_right, str);
+ if (ret == NULL) {
+ xmlExpFree(ctxt, tmp);
+ return(NULL);
+ }
+ ret = xmlExpHashGetEntry(ctxt, XML_EXP_OR, tmp, ret,
+ NULL, 0, 0);
+ return(ret);
+ }
+ case XML_EXP_SEQ:
+#ifdef DEBUG_DERIV
+ printf("deriv seq: starting with left\n");
+#endif
+ ret = xmlExpStringDeriveInt(ctxt, exp->exp_left, str);
+ if (ret == NULL) {
+ return(NULL);
+ } else if (ret == forbiddenExp) {
+ if (IS_NILLABLE(exp->exp_left)) {
+#ifdef DEBUG_DERIV
+ printf("deriv seq: left failed but nillable\n");
+#endif
+ ret = xmlExpStringDeriveInt(ctxt, exp->exp_right, str);
+ }
+ } else {
+#ifdef DEBUG_DERIV
+ printf("deriv seq: left match => sequence\n");
+#endif
+ exp->exp_right->ref++;
+ ret = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret, exp->exp_right,
+ NULL, 0, 0);
+ }
+ return(ret);
+ case XML_EXP_COUNT: {
+ int min, max;
+ xmlExpNodePtr tmp;
+
+ if (exp->exp_max == 0)
+ return(forbiddenExp);
+ ret = xmlExpStringDeriveInt(ctxt, exp->exp_left, str);
+ if (ret == NULL)
+ return(NULL);
+ if (ret == forbiddenExp) {
+#ifdef DEBUG_DERIV
+ printf("deriv count: pattern mismatch => forbid\n");
+#endif
+ return(ret);
+ }
+ if (exp->exp_max == 1)
+ return(ret);
+ if (exp->exp_max < 0) /* unbounded */
+ max = -1;
+ else
+ max = exp->exp_max - 1;
+ if (exp->exp_min > 0)
+ min = exp->exp_min - 1;
+ else
+ min = 0;
+ exp->exp_left->ref++;
+ tmp = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, exp->exp_left, NULL,
+ NULL, min, max);
+ if (ret == emptyExp) {
+#ifdef DEBUG_DERIV
+ printf("deriv count: match to empty => new count\n");
+#endif
+ return(tmp);
+ }
+#ifdef DEBUG_DERIV
+ printf("deriv count: match => sequence with new count\n");
+#endif
+ return(xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret, tmp,
+ NULL, 0, 0));
+ }
+ }
+ return(NULL);
+}
+
+/**
+ * xmlExpStringDerive:
+ * @ctxt: the expression context
+ * @exp: the expression
+ * @str: the string
+ * @len: the string len in bytes if available
+ *
+ * Do one step of Brzozowski derivation of the expression @exp with
+ * respect to the input string
+ *
+ * Returns the resulting expression or NULL in case of internal error
+ */
+xmlExpNodePtr
+xmlExpStringDerive(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
+ const xmlChar *str, int len) {
+ const xmlChar *input;
+
+ if ((exp == NULL) || (ctxt == NULL) || (str == NULL)) {
+ return(NULL);
+ }
+ /*
+ * check the string is in the dictionnary, if yes use an interned
+ * copy, otherwise we know it's not an acceptable input
+ */
+ input = xmlDictExists(ctxt->dict, str, len);
+ if (input == NULL) {
+ return(forbiddenExp);
+ }
+ return(xmlExpStringDeriveInt(ctxt, exp, input));
+}
+
+static int
+xmlExpCheckCard(xmlExpNodePtr exp, xmlExpNodePtr sub) {
+ int ret = 1;
+
+ if (sub->c_max == -1) {
+ if (exp->c_max != -1)
+ ret = 0;
+ } else if ((exp->c_max >= 0) && (exp->c_max < sub->c_max)) {
+ ret = 0;
+ }
+#if 0
+ if ((IS_NILLABLE(sub)) && (!IS_NILLABLE(exp)))
+ ret = 0;
+#endif
+ return(ret);
+}
+
+static xmlExpNodePtr xmlExpExpDeriveInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
+ xmlExpNodePtr sub);
+/**
+ * xmlExpDivide:
+ * @ctxt: the expressions context
+ * @exp: the englobing expression
+ * @sub: the subexpression
+ * @mult: the multiple expression
+ * @remain: the remain from the derivation of the multiple
+ *
+ * Check if exp is a multiple of sub, i.e. if there is a finite number n
+ * so that sub{n} subsume exp
+ *
+ * Returns the multiple value if successful, 0 if it is not a multiple
+ * and -1 in case of internel error.
+ */
+
+static int
+xmlExpDivide(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub,
+ xmlExpNodePtr *mult, xmlExpNodePtr *remain) {
+ int i;
+ xmlExpNodePtr tmp, tmp2;
+
+ if (mult != NULL) *mult = NULL;
+ if (remain != NULL) *remain = NULL;
+ if (exp->c_max == -1) return(0);
+ if (IS_NILLABLE(exp) && (!IS_NILLABLE(sub))) return(0);
+
+ for (i = 1;i <= exp->c_max;i++) {
+ sub->ref++;
+ tmp = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT,
+ sub, NULL, NULL, i, i);
+ if (tmp == NULL) {
+ return(-1);
+ }
+ if (!xmlExpCheckCard(tmp, exp)) {
+ xmlExpFree(ctxt, tmp);
+ continue;
+ }
+ tmp2 = xmlExpExpDeriveInt(ctxt, tmp, exp);
+ if (tmp2 == NULL) {
+ xmlExpFree(ctxt, tmp);
+ return(-1);
+ }
+ if ((tmp2 != forbiddenExp) && (IS_NILLABLE(tmp2))) {
+ if (remain != NULL)
+ *remain = tmp2;
+ else
+ xmlExpFree(ctxt, tmp2);
+ if (mult != NULL)
+ *mult = tmp;
+ else
+ xmlExpFree(ctxt, tmp);
+#ifdef DEBUG_DERIV
+ printf("Divide succeeded %d\n", i);
+#endif
+ return(i);
+ }
+ xmlExpFree(ctxt, tmp);
+ xmlExpFree(ctxt, tmp2);
+ }
+#ifdef DEBUG_DERIV
+ printf("Divide failed\n");
+#endif
+ return(0);
+}
+
+/**
+ * xmlExpExpDeriveInt:
+ * @ctxt: the expressions context
+ * @exp: the englobing expression
+ * @sub: the subexpression
+ *
+ * Try to do a step of Brzozowski derivation but at a higher level
+ * the input being a subexpression.
+ *
+ * Returns the resulting expression or NULL in case of internal error
+ */
+static xmlExpNodePtr
+xmlExpExpDeriveInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) {
+ xmlExpNodePtr ret, tmp, tmp2, tmp3;
+ const xmlChar **tab;
+ int len, i;
+
+ /*
+ * In case of equality and if the expression can only consume a finite
+ * amount, then the derivation is empty
+ */
+ if ((exp == sub) && (exp->c_max >= 0)) {
+#ifdef DEBUG_DERIV
+ printf("Equal(exp, sub) and finite -> Empty\n");
+#endif
+ return(emptyExp);
+ }
+ /*
+ * decompose sub sequence first
+ */
+ if (sub->type == XML_EXP_EMPTY) {
+#ifdef DEBUG_DERIV
+ printf("Empty(sub) -> Empty\n");
+#endif
+ exp->ref++;
+ return(exp);
+ }
+ if (sub->type == XML_EXP_SEQ) {
+#ifdef DEBUG_DERIV
+ printf("Seq(sub) -> decompose\n");
+#endif
+ tmp = xmlExpExpDeriveInt(ctxt, exp, sub->exp_left);
+ if (tmp == NULL)
+ return(NULL);
+ if (tmp == forbiddenExp)
+ return(tmp);
+ ret = xmlExpExpDeriveInt(ctxt, tmp, sub->exp_right);
+ xmlExpFree(ctxt, tmp);
+ return(ret);
+ }
+ if (sub->type == XML_EXP_OR) {
+#ifdef DEBUG_DERIV
+ printf("Or(sub) -> decompose\n");
+#endif
+ tmp = xmlExpExpDeriveInt(ctxt, exp, sub->exp_left);
+ if (tmp == forbiddenExp)
+ return(tmp);
+ if (tmp == NULL)
+ return(NULL);
+ ret = xmlExpExpDeriveInt(ctxt, exp, sub->exp_right);
+ if ((ret == NULL) || (ret == forbiddenExp)) {
+ xmlExpFree(ctxt, tmp);
+ return(ret);
+ }
+ return(xmlExpHashGetEntry(ctxt, XML_EXP_OR, tmp, ret, NULL, 0, 0));
+ }
+ if (!xmlExpCheckCard(exp, sub)) {
+#ifdef DEBUG_DERIV
+ printf("CheckCard(exp, sub) failed -> Forbid\n");
+#endif
+ return(forbiddenExp);
+ }
+ switch (exp->type) {
+ case XML_EXP_EMPTY:
+ if (sub == emptyExp)
+ return(emptyExp);
+#ifdef DEBUG_DERIV
+ printf("Empty(exp) -> Forbid\n");
+#endif
+ return(forbiddenExp);
+ case XML_EXP_FORBID:
+#ifdef DEBUG_DERIV
+ printf("Forbid(exp) -> Forbid\n");
+#endif
+ return(forbiddenExp);
+ case XML_EXP_ATOM:
+ if (sub->type == XML_EXP_ATOM) {
+ /* TODO: handle wildcards */
+ if (exp->exp_str == sub->exp_str) {
+#ifdef DEBUG_DERIV
+ printf("Atom match -> Empty\n");
+#endif
+ return(emptyExp);
+ }
+#ifdef DEBUG_DERIV
+ printf("Atom mismatch -> Forbid\n");
+#endif
+ return(forbiddenExp);
+ }
+ if ((sub->type == XML_EXP_COUNT) &&
+ (sub->exp_max == 1) &&
+ (sub->exp_left->type == XML_EXP_ATOM)) {
+ /* TODO: handle wildcards */
+ if (exp->exp_str == sub->exp_left->exp_str) {
+#ifdef DEBUG_DERIV
+ printf("Atom match -> Empty\n");
+#endif
+ return(emptyExp);
+ }
+#ifdef DEBUG_DERIV
+ printf("Atom mismatch -> Forbid\n");
+#endif
+ return(forbiddenExp);
+ }
+#ifdef DEBUG_DERIV
+ printf("Compex exp vs Atom -> Forbid\n");
+#endif
+ return(forbiddenExp);
+ case XML_EXP_SEQ:
+ /* try to get the sequence consumed only if possible */
+ if (xmlExpCheckCard(exp->exp_left, sub)) {
+ /* See if the sequence can be consumed directly */
+#ifdef DEBUG_DERIV
+ printf("Seq trying left only\n");
+#endif
+ ret = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub);
+ if ((ret != forbiddenExp) && (ret != NULL)) {
+#ifdef DEBUG_DERIV
+ printf("Seq trying left only worked\n");
+#endif
+ /*
+ * TODO: assumption here that we are determinist
+ * i.e. we won't get to a nillable exp left
+ * subset which could be matched by the right
+ * part too.
+ * e.g.: (a | b)+,(a | c) and 'a+,a'
+ */
+ exp->exp_right->ref++;
+ return(xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret,
+ exp->exp_right, NULL, 0, 0));
+ }
+#ifdef DEBUG_DERIV
+ } else {
+ printf("Seq: left too short\n");
+#endif
+ }
+ /* Try instead to decompose */
+ if (sub->type == XML_EXP_COUNT) {
+ int min, max;
+
+#ifdef DEBUG_DERIV
+ printf("Seq: sub is a count\n");
+#endif
+ ret = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub->exp_left);
+ if (ret == NULL)
+ return(NULL);
+ if (ret != forbiddenExp) {
+#ifdef DEBUG_DERIV
+ printf("Seq , Count match on left\n");
+#endif
+ if (sub->exp_max < 0)
+ max = -1;
+ else
+ max = sub->exp_max -1;
+ if (sub->exp_min > 0)
+ min = sub->exp_min -1;
+ else
+ min = 0;
+ exp->exp_right->ref++;
+ tmp = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret,
+ exp->exp_right, NULL, 0, 0);
+ if (tmp == NULL)
+ return(NULL);
+
+ sub->exp_left->ref++;
+ tmp2 = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT,
+ sub->exp_left, NULL, NULL, min, max);
+ if (tmp2 == NULL) {
+ xmlExpFree(ctxt, tmp);
+ return(NULL);
+ }
+ ret = xmlExpExpDeriveInt(ctxt, tmp, tmp2);
+ xmlExpFree(ctxt, tmp);
+ xmlExpFree(ctxt, tmp2);
+ return(ret);
+ }
+ }
+ /* we made no progress on structured operations */
+ break;
+ case XML_EXP_OR:
+#ifdef DEBUG_DERIV
+ printf("Or , trying both side\n");
+#endif
+ ret = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub);
+ if (ret == NULL)
+ return(NULL);
+ tmp = xmlExpExpDeriveInt(ctxt, exp->exp_right, sub);
+ if (tmp == NULL) {
+ xmlExpFree(ctxt, ret);
+ return(NULL);
+ }
+ return(xmlExpHashGetEntry(ctxt, XML_EXP_OR, ret, tmp, NULL, 0, 0));
+ case XML_EXP_COUNT: {
+ int min, max;
+
+ if (sub->type == XML_EXP_COUNT) {
+ /*
+ * Try to see if the loop is completely subsumed
+ */
+ tmp = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub->exp_left);
+ if (tmp == NULL)
+ return(NULL);
+ if (tmp == forbiddenExp) {
+ int mult;
+
+#ifdef DEBUG_DERIV
+ printf("Count, Count inner don't subsume\n");
+#endif
+ mult = xmlExpDivide(ctxt, sub->exp_left, exp->exp_left,
+ NULL, &tmp);
+ if (mult <= 0) {
+#ifdef DEBUG_DERIV
+ printf("Count, Count not multiple => forbidden\n");
+#endif
+ return(forbiddenExp);
+ }
+ if (sub->exp_max == -1) {
+ max = -1;
+ if (exp->exp_max == -1) {
+ if (exp->exp_min <= sub->exp_min * mult)
+ min = 0;
+ else
+ min = exp->exp_min - sub->exp_min * mult;
+ } else {
+#ifdef DEBUG_DERIV
+ printf("Count, Count finite can't subsume infinite\n");
+#endif
+ xmlExpFree(ctxt, tmp);
+ return(forbiddenExp);
+ }
+ } else {
+ if (exp->exp_max == -1) {
+#ifdef DEBUG_DERIV
+ printf("Infinite loop consume mult finite loop\n");
+#endif
+ if (exp->exp_min > sub->exp_min * mult) {
+ max = -1;
+ min = exp->exp_min - sub->exp_min * mult;
+ } else {
+ max = -1;
+ min = 0;
+ }
+ } else {
+ if (exp->exp_max < sub->exp_max * mult) {
+#ifdef DEBUG_DERIV
+ printf("loops max mult mismatch => forbidden\n");
+#endif
+ xmlExpFree(ctxt, tmp);
+ return(forbiddenExp);
+ }
+ if (sub->exp_max * mult > exp->exp_min)
+ min = 0;
+ else
+ min = exp->exp_min - sub->exp_max * mult;
+ max = exp->exp_max - sub->exp_max * mult;
+ }
+ }
+ } else if (!IS_NILLABLE(tmp)) {
+ /*
+ * TODO: loop here to try to grow if working on finite
+ * blocks.
+ */
+#ifdef DEBUG_DERIV
+ printf("Count, Count remain not nillable => forbidden\n");
+#endif
+ xmlExpFree(ctxt, tmp);
+ return(forbiddenExp);
+ } else if (sub->exp_max == -1) {
+ if (exp->exp_max == -1) {
+ if (exp->exp_min <= sub->exp_min) {
+#ifdef DEBUG_DERIV
+ printf("Infinite loops Okay => COUNT(0,Inf)\n");
+#endif
+ max = -1;
+ min = 0;
+ } else {
+#ifdef DEBUG_DERIV
+ printf("Infinite loops min => Count(X,Inf)\n");
+#endif
+ max = -1;
+ min = exp->exp_min - sub->exp_min;
+ }
+ } else if (exp->exp_min > sub->exp_min) {
+#ifdef DEBUG_DERIV
+ printf("loops min mismatch 1 => forbidden ???\n");
+#endif
+ xmlExpFree(ctxt, tmp);
+ return(forbiddenExp);
+ } else {
+ max = -1;
+ min = 0;
+ }
+ } else {
+ if (exp->exp_max == -1) {
+#ifdef DEBUG_DERIV
+ printf("Infinite loop consume finite loop\n");
+#endif
+ if (exp->exp_min > sub->exp_min) {
+ max = -1;
+ min = exp->exp_min - sub->exp_min;
+ } else {
+ max = -1;
+ min = 0;
+ }
+ } else {
+ if (exp->exp_max < sub->exp_max) {
+#ifdef DEBUG_DERIV
+ printf("loops max mismatch => forbidden\n");
+#endif
+ xmlExpFree(ctxt, tmp);
+ return(forbiddenExp);
+ }
+ if (sub->exp_max > exp->exp_min)
+ min = 0;
+ else
+ min = exp->exp_min - sub->exp_max;
+ max = exp->exp_max - sub->exp_max;
+ }
+ }
+#ifdef DEBUG_DERIV
+ printf("loops match => SEQ(COUNT())\n");
+#endif
+ exp->exp_left->ref++;
+ tmp2 = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, exp->exp_left,
+ NULL, NULL, min, max);
+ if (tmp2 == NULL) {
+ return(NULL);
+ }
+ ret = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, tmp, tmp2,
+ NULL, 0, 0);
+ return(ret);
+ }
+ tmp = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub);
+ if (tmp == NULL)
+ return(NULL);
+ if (tmp == forbiddenExp) {
+#ifdef DEBUG_DERIV
+ printf("loop mismatch => forbidden\n");
+#endif
+ return(forbiddenExp);
+ }
+ if (exp->exp_min > 0)
+ min = exp->exp_min - 1;
+ else
+ min = 0;
+ if (exp->exp_max < 0)
+ max = -1;
+ else
+ max = exp->exp_max - 1;
+
+#ifdef DEBUG_DERIV
+ printf("loop match => SEQ(COUNT())\n");
+#endif
+ exp->exp_left->ref++;
+ tmp2 = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, exp->exp_left,
+ NULL, NULL, min, max);
+ if (tmp2 == NULL)
+ return(NULL);
+ ret = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, tmp, tmp2,
+ NULL, 0, 0);
+ return(ret);
+ }
+ }
+
+#ifdef DEBUG_DERIV
+ printf("Fallback to derivative\n");
+#endif
+ if (IS_NILLABLE(sub)) {
+ if (!(IS_NILLABLE(exp)))
+ return(forbiddenExp);
+ else
+ ret = emptyExp;
+ } else
+ ret = NULL;
+ /*
+ * here the structured derivation made no progress so
+ * we use the default token based derivation to force one more step
+ */
+ if (ctxt->tabSize == 0)
+ ctxt->tabSize = 40;
+
+ tab = (const xmlChar **) xmlMalloc(ctxt->tabSize *
+ sizeof(const xmlChar *));
+ if (tab == NULL) {
+ return(NULL);
+ }
+
+ /*
+ * collect all the strings accepted by the subexpression on input
+ */
+ len = xmlExpGetStartInt(ctxt, sub, tab, ctxt->tabSize, 0);
+ while (len < 0) {
+ const xmlChar **temp;
+ temp = (const xmlChar **) xmlRealloc(tab, ctxt->tabSize * 2 *
+ sizeof(const xmlChar *));
+ if (temp == NULL) {
+ xmlFree(tab);
+ return(NULL);
+ }
+ tab = temp;
+ ctxt->tabSize *= 2;
+ len = xmlExpGetStartInt(ctxt, sub, tab, ctxt->tabSize, 0);
+ }
+ for (i = 0;i < len;i++) {
+ tmp = xmlExpStringDeriveInt(ctxt, exp, tab[i]);
+ if ((tmp == NULL) || (tmp == forbiddenExp)) {
+ xmlExpFree(ctxt, ret);
+ xmlFree(tab);
+ return(tmp);
+ }
+ tmp2 = xmlExpStringDeriveInt(ctxt, sub, tab[i]);
+ if ((tmp2 == NULL) || (tmp2 == forbiddenExp)) {
+ xmlExpFree(ctxt, tmp);
+ xmlExpFree(ctxt, ret);
+ xmlFree(tab);
+ return(tmp);
+ }
+ tmp3 = xmlExpExpDeriveInt(ctxt, tmp, tmp2);
+ xmlExpFree(ctxt, tmp);
+ xmlExpFree(ctxt, tmp2);
+
+ if ((tmp3 == NULL) || (tmp3 == forbiddenExp)) {
+ xmlExpFree(ctxt, ret);
+ xmlFree(tab);
+ return(tmp3);
+ }
+
+ if (ret == NULL)
+ ret = tmp3;
+ else {
+ ret = xmlExpHashGetEntry(ctxt, XML_EXP_OR, ret, tmp3, NULL, 0, 0);
+ if (ret == NULL) {
+ xmlFree(tab);
+ return(NULL);
+ }
+ }
+ }
+ xmlFree(tab);
+ return(ret);
+}
+
+/**
+ * xmlExpExpDerive:
+ * @ctxt: the expressions context
+ * @exp: the englobing expression
+ * @sub: the subexpression
+ *
+ * Evaluates the expression resulting from @exp consuming a sub expression @sub
+ * Based on algebraic derivation and sometimes direct Brzozowski derivation
+ * it usually tatkes less than linear time and can handle expressions generating
+ * infinite languages.
+ *
+ * Returns the resulting expression or NULL in case of internal error, the
+ * result must be freed
+ */
+xmlExpNodePtr
+xmlExpExpDerive(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) {
+ if ((exp == NULL) || (ctxt == NULL) || (sub == NULL))
+ return(NULL);
+
+ /*
+ * O(1) speedups
+ */
+ if (IS_NILLABLE(sub) && (!IS_NILLABLE(exp))) {
+#ifdef DEBUG_DERIV
+ printf("Sub nillable and not exp : can't subsume\n");
+#endif
+ return(forbiddenExp);
+ }
+ if (xmlExpCheckCard(exp, sub) == 0) {
+#ifdef DEBUG_DERIV
+ printf("sub generate longuer sequances than exp : can't subsume\n");
+#endif
+ return(forbiddenExp);
+ }
+ return(xmlExpExpDeriveInt(ctxt, exp, sub));
+}
+
+/**
+ * xmlExpSubsume:
+ * @ctxt: the expressions context
+ * @exp: the englobing expression
+ * @sub: the subexpression
+ *
+ * Check whether @exp accepts all the languages accexpted by @sub
+ * the input being a subexpression.
+ *
+ * Returns 1 if true 0 if false and -1 in case of failure.
+ */
+int
+xmlExpSubsume(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) {
+ xmlExpNodePtr tmp;
+
+ if ((exp == NULL) || (ctxt == NULL) || (sub == NULL))
+ return(-1);
+
+ /*
+ * TODO: speedup by checking the language of sub is a subset of the
+ * language of exp
+ */
+ /*
+ * O(1) speedups
+ */
+ if (IS_NILLABLE(sub) && (!IS_NILLABLE(exp))) {
+#ifdef DEBUG_DERIV
+ printf("Sub nillable and not exp : can't subsume\n");
+#endif
+ return(0);
+ }
+ if (xmlExpCheckCard(exp, sub) == 0) {
+#ifdef DEBUG_DERIV
+ printf("sub generate longuer sequances than exp : can't subsume\n");
+#endif
+ return(0);
+ }
+ tmp = xmlExpExpDeriveInt(ctxt, exp, sub);
+#ifdef DEBUG_DERIV
+ printf("Result derivation :\n");
+ PRINT_EXP(tmp);
+#endif
+ if (tmp == NULL)
+ return(-1);
+ if (tmp == forbiddenExp)
+ return(0);
+ if (tmp == emptyExp)
+ return(1);
+ if ((tmp != NULL) && (IS_NILLABLE(tmp))) {
+ xmlExpFree(ctxt, tmp);
+ return(1);
+ }
+ xmlExpFree(ctxt, tmp);
+ return(0);
+}
+
+/************************************************************************
+ * *
+ * Parsing expression *
+ * *
+ ************************************************************************/
+
+static xmlExpNodePtr xmlExpParseExpr(xmlExpCtxtPtr ctxt);
+
+#undef CUR
+#define CUR (*ctxt->cur)
+#undef NEXT
+#define NEXT ctxt->cur++;
+#undef IS_BLANK
+#define IS_BLANK(c) ((c == ' ') || (c == '\n') || (c == '\r') || (c == '\t'))
+#define SKIP_BLANKS while (IS_BLANK(*ctxt->cur)) ctxt->cur++;
+
+static int
+xmlExpParseNumber(xmlExpCtxtPtr ctxt) {
+ int ret = 0;
+
+ SKIP_BLANKS
+ if (CUR == '*') {
+ NEXT
+ return(-1);
+ }
+ if ((CUR < '0') || (CUR > '9'))
+ return(-1);
+ while ((CUR >= '0') && (CUR <= '9')) {
+ ret = ret * 10 + (CUR - '0');
+ NEXT
+ }
+ return(ret);
+}
+
+static xmlExpNodePtr
+xmlExpParseOr(xmlExpCtxtPtr ctxt) {
+ const char *base;
+ xmlExpNodePtr ret;
+ const xmlChar *val;
+
+ SKIP_BLANKS
+ base = ctxt->cur;
+ if (*ctxt->cur == '(') {
+ NEXT
+ ret = xmlExpParseExpr(ctxt);
+ SKIP_BLANKS
+ if (*ctxt->cur != ')') {
+ fprintf(stderr, "unbalanced '(' : %s\n", base);
+ xmlExpFree(ctxt, ret);
+ return(NULL);
+ }
+ NEXT;
+ SKIP_BLANKS
+ goto parse_quantifier;
+ }
+ while ((CUR != 0) && (!(IS_BLANK(CUR))) && (CUR != '(') &&
+ (CUR != ')') && (CUR != '|') && (CUR != ',') && (CUR != '{') &&
+ (CUR != '*') && (CUR != '+') && (CUR != '?') && (CUR != '}'))
+ NEXT;
+ val = xmlDictLookup(ctxt->dict, BAD_CAST base, ctxt->cur - base);
+ if (val == NULL)
+ return(NULL);
+ ret = xmlExpHashGetEntry(ctxt, XML_EXP_ATOM, NULL, NULL, val, 0, 0);
+ if (ret == NULL)
+ return(NULL);
+ SKIP_BLANKS
+parse_quantifier:
+ if (CUR == '{') {
+ int min, max;
+
+ NEXT
+ min = xmlExpParseNumber(ctxt);
+ if (min < 0) {
+ xmlExpFree(ctxt, ret);
+ return(NULL);
+ }
+ SKIP_BLANKS
+ if (CUR == ',') {
+ NEXT
+ max = xmlExpParseNumber(ctxt);
+ SKIP_BLANKS
+ } else
+ max = min;
+ if (CUR != '}') {
+ xmlExpFree(ctxt, ret);
+ return(NULL);
+ }
+ NEXT
+ ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL,
+ min, max);
+ SKIP_BLANKS
+ } else if (CUR == '?') {
+ NEXT
+ ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL,
+ 0, 1);
+ SKIP_BLANKS
+ } else if (CUR == '+') {
+ NEXT
+ ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL,
+ 1, -1);
+ SKIP_BLANKS
+ } else if (CUR == '*') {
+ NEXT
+ ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL,
+ 0, -1);
+ SKIP_BLANKS
+ }
+ return(ret);
+}
+
+
+static xmlExpNodePtr
+xmlExpParseSeq(xmlExpCtxtPtr ctxt) {
+ xmlExpNodePtr ret, right;
+
+ ret = xmlExpParseOr(ctxt);
+ SKIP_BLANKS
+ while (CUR == '|') {
+ NEXT
+ right = xmlExpParseOr(ctxt);
+ if (right == NULL) {
+ xmlExpFree(ctxt, ret);
+ return(NULL);
+ }
+ ret = xmlExpHashGetEntry(ctxt, XML_EXP_OR, ret, right, NULL, 0, 0);
+ if (ret == NULL)
+ return(NULL);
+ }
+ return(ret);
+}
+
+static xmlExpNodePtr
+xmlExpParseExpr(xmlExpCtxtPtr ctxt) {
+ xmlExpNodePtr ret, right;
+
+ ret = xmlExpParseSeq(ctxt);
+ SKIP_BLANKS
+ while (CUR == ',') {
+ NEXT
+ right = xmlExpParseSeq(ctxt);
+ if (right == NULL) {
+ xmlExpFree(ctxt, ret);
+ return(NULL);
+ }
+ ret = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret, right, NULL, 0, 0);
+ if (ret == NULL)
+ return(NULL);
+ }
+ return(ret);
+}
+
+/**
+ * xmlExpParse:
+ * @ctxt: the expressions context
+ * @expr: the 0 terminated string
+ *
+ * Minimal parser for regexps, it understand the following constructs
+ * - string terminals
+ * - choice operator |
+ * - sequence operator ,
+ * - subexpressions (...)
+ * - usual cardinality operators + * and ?
+ * - finite sequences { min, max }
+ * - infinite sequences { min, * }
+ * There is minimal checkings made especially no checking on strings values
+ *
+ * Returns a new expression or NULL in case of failure
+ */
+xmlExpNodePtr
+xmlExpParse(xmlExpCtxtPtr ctxt, const char *expr) {
+ xmlExpNodePtr ret;
+
+ ctxt->expr = expr;
+ ctxt->cur = expr;
+
+ ret = xmlExpParseExpr(ctxt);
+ SKIP_BLANKS
+ if (*ctxt->cur != 0) {
+ xmlExpFree(ctxt, ret);
+ return(NULL);
+ }
+ return(ret);
+}
+
+static void
+xmlExpDumpInt(xmlBufferPtr buf, xmlExpNodePtr expr, int glob) {
+ xmlExpNodePtr c;
+
+ if (expr == NULL) return;
+ if (glob) xmlBufferWriteChar(buf, "(");
+ switch (expr->type) {
+ case XML_EXP_EMPTY:
+ xmlBufferWriteChar(buf, "empty");
+ break;
+ case XML_EXP_FORBID:
+ xmlBufferWriteChar(buf, "forbidden");
+ break;
+ case XML_EXP_ATOM:
+ xmlBufferWriteCHAR(buf, expr->exp_str);
+ break;
+ case XML_EXP_SEQ:
+ c = expr->exp_left;
+ if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
+ xmlExpDumpInt(buf, c, 1);
+ else
+ xmlExpDumpInt(buf, c, 0);
+ xmlBufferWriteChar(buf, " , ");
+ c = expr->exp_right;
+ if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
+ xmlExpDumpInt(buf, c, 1);
+ else
+ xmlExpDumpInt(buf, c, 0);
+ break;
+ case XML_EXP_OR:
+ c = expr->exp_left;
+ if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
+ xmlExpDumpInt(buf, c, 1);
+ else
+ xmlExpDumpInt(buf, c, 0);
+ xmlBufferWriteChar(buf, " | ");
+ c = expr->exp_right;
+ if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
+ xmlExpDumpInt(buf, c, 1);
+ else
+ xmlExpDumpInt(buf, c, 0);
+ 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);
+ else
+ xmlExpDumpInt(buf, c, 0);
+ if ((expr->exp_min == 0) && (expr->exp_max == 1)) {
+ rep[0] = '?';
+ rep[1] = 0;
+ } else if ((expr->exp_min == 0) && (expr->exp_max == -1)) {
+ rep[0] = '*';
+ rep[1] = 0;
+ } else if ((expr->exp_min == 1) && (expr->exp_max == -1)) {
+ rep[0] = '+';
+ rep[1] = 0;
+ } else if (expr->exp_max == expr->exp_min) {
+ snprintf(rep, 39, "{%d}", expr->exp_min);
+ } else if (expr->exp_max < 0) {
+ snprintf(rep, 39, "{%d,inf}", expr->exp_min);
+ } else {
+ snprintf(rep, 39, "{%d,%d}", expr->exp_min, expr->exp_max);
+ }
+ rep[39] = 0;
+ xmlBufferWriteChar(buf, rep);
+ break;
+ }
+ default:
+ fprintf(stderr, "Error in tree\n");
+ }
+ if (glob)
+ xmlBufferWriteChar(buf, ")");
+}
+/**
+ * xmlExpDump:
+ * @buf: a buffer to receive the output
+ * @expr: the compiled expression
+ *
+ * Serialize the expression as compiled to the buffer
+ */
+void
+xmlExpDump(xmlBufferPtr buf, xmlExpNodePtr expr) {
+ if ((buf == NULL) || (expr == NULL))
+ return;
+ xmlExpDumpInt(buf, expr, 0);
+}
+
+/**
+ * xmlExpMaxToken:
+ * @expr: a compiled expression
+ *
+ * Indicate the maximum number of input a expression can accept
+ *
+ * Returns the maximum length or -1 in case of error
+ */
+int
+xmlExpMaxToken(xmlExpNodePtr expr) {
+ if (expr == NULL)
+ return(-1);
+ return(expr->c_max);
+}
+
+/**
+ * xmlExpCtxtNbNodes:
+ * @ctxt: an expression context
+ *
+ * Debugging facility provides the number of allocated nodes at a that point
+ *
+ * Returns the number of nodes in use or -1 in case of error
+ */
+int
+xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt) {
+ if (ctxt == NULL)
+ return(-1);
+ return(ctxt->nb_nodes);
+}
+
+/**
+ * xmlExpCtxtNbCons:
+ * @ctxt: an expression context
+ *
+ * Debugging facility provides the number of allocated nodes over lifetime
+ *
+ * Returns the number of nodes ever allocated or -1 in case of error
+ */
+int
+xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt) {
+ if (ctxt == NULL)
+ return(-1);
+ return(ctxt->nb_cons);
+}
+
+#endif /* LIBXML_EXPR_ENABLED */
#define bottom_xmlregexp
#include "elfgcchack.h"
#endif /* LIBXML_REGEXP_ENABLED */
diff --git a/xmlsave.c b/xmlsave.c
index d6e3e65..571427d 100644
--- a/xmlsave.c
+++ b/xmlsave.c
@@ -826,31 +826,33 @@ xmlDocContentDumpOutput(xmlSaveCtxtPtr ctxt, xmlDocPtr cur) {
cur->encoding = BAD_CAST ctxt->encoding;
buf = ctxt->buf;
- xmlOutputBufferWrite(buf, 14, "<?xml version=");
- if (cur->version != NULL)
- xmlBufferWriteQuotedString(buf->buffer, cur->version);
- else
- xmlOutputBufferWrite(buf, 5, "\"1.0\"");
- if (ctxt->encoding == NULL) {
- if (cur->encoding != NULL)
- encoding = cur->encoding;
- else if (cur->charset != XML_CHAR_ENCODING_UTF8)
- encoding = (const xmlChar *)
- xmlGetCharEncodingName((xmlCharEncoding) cur->charset);
- }
- if (encoding != NULL) {
- xmlOutputBufferWrite(buf, 10, " encoding=");
- xmlBufferWriteQuotedString(buf->buffer, (xmlChar *) encoding);
- }
- switch (cur->standalone) {
- case 0:
- xmlOutputBufferWrite(buf, 16, " standalone=\"no\"");
- break;
- case 1:
- xmlOutputBufferWrite(buf, 17, " standalone=\"yes\"");
- break;
+ if ((ctxt->options & XML_SAVE_NO_DECL) == 0) {
+ xmlOutputBufferWrite(buf, 14, "<?xml version=");
+ if (cur->version != NULL)
+ xmlBufferWriteQuotedString(buf->buffer, cur->version);
+ else
+ xmlOutputBufferWrite(buf, 5, "\"1.0\"");
+ if (ctxt->encoding == NULL) {
+ if (cur->encoding != NULL)
+ encoding = cur->encoding;
+ else if (cur->charset != XML_CHAR_ENCODING_UTF8)
+ encoding = (const xmlChar *)
+ xmlGetCharEncodingName((xmlCharEncoding) cur->charset);
+ }
+ if (encoding != NULL) {
+ xmlOutputBufferWrite(buf, 10, " encoding=");
+ xmlBufferWriteQuotedString(buf->buffer, (xmlChar *) encoding);
+ }
+ switch (cur->standalone) {
+ case 0:
+ xmlOutputBufferWrite(buf, 16, " standalone=\"no\"");
+ break;
+ case 1:
+ xmlOutputBufferWrite(buf, 17, " standalone=\"yes\"");
+ break;
+ }
+ xmlOutputBufferWrite(buf, 3, "?>\n");
}
- xmlOutputBufferWrite(buf, 3, "?>\n");
#ifdef LIBXML_HTML_ENABLED
dtd = xmlGetIntSubset(cur);
@@ -858,12 +860,6 @@ xmlDocContentDumpOutput(xmlSaveCtxtPtr ctxt, xmlDocPtr cur) {
is_xhtml = xmlIsXHTML(dtd->SystemID, dtd->ExternalID);
if (is_xhtml < 0) is_xhtml = 0;
}
- if (is_xhtml) {
- if (encoding != NULL)
- htmlSetMetaEncoding(cur, (const xmlChar *) ctxt->encoding);
- else
- htmlSetMetaEncoding(cur, BAD_CAST "UTF-8");
- }
#endif
if (cur->children != NULL) {
xmlNodePtr child = cur->children;
@@ -1084,7 +1080,7 @@ xhtmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
*/
static void
xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
- int format;
+ int format, addmeta = 0;
xmlNodePtr tmp;
xmlChar *start, *end;
xmlOutputBufferPtr buf;
@@ -1208,14 +1204,51 @@ 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") &&
+ xmlStrEqual(cur->parent->name, BAD_CAST"html")) {
+
+ tmp = cur->children;
+ while (tmp != NULL) {
+ if (xmlStrEqual(tmp->name, BAD_CAST"meta")) {
+ xmlChar *httpequiv;
+
+ httpequiv = xmlGetProp(tmp, BAD_CAST"http-equiv");
+ if (httpequiv != NULL) {
+ if (xmlStrcasecmp(httpequiv, BAD_CAST"Content-Type") == 0) {
+ xmlFree(httpequiv);
+ break;
+ }
+ xmlFree(httpequiv);
+ }
+ }
+ tmp = tmp->next;
+ }
+ if (tmp == NULL)
+ addmeta = 1;
+ }
+
if ((cur->type == XML_ELEMENT_NODE) && (cur->children == NULL)) {
if (((cur->ns == NULL) || (cur->ns->prefix == NULL)) &&
- (xhtmlIsEmpty(cur) == 1)) {
+ ((xhtmlIsEmpty(cur) == 1) && (addmeta == 0))) {
/*
* C.2. Empty Elements
*/
xmlOutputBufferWrite(buf, 3, " />");
} else {
+ if (addmeta == 1) {
+ xmlOutputBufferWrite(buf, 1, ">");
+ xmlOutputBufferWriteString(buf,
+ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=");
+ if (ctxt->encoding) {
+ xmlOutputBufferWriteString(buf, (const char *)ctxt->encoding);
+ } else {
+ xmlOutputBufferWrite(buf, 5, "UTF-8");
+ }
+ xmlOutputBufferWrite(buf, 3, "\" /");
+ }
/*
* C.3. Element Minimization and Empty Element Content
*/
@@ -1230,6 +1263,16 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
return;
}
xmlOutputBufferWrite(buf, 1, ">");
+ if (addmeta == 1) {
+ xmlOutputBufferWriteString(buf,
+ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=");
+ if (ctxt->encoding) {
+ xmlOutputBufferWriteString(buf, (const char *)ctxt->encoding);
+ } else {
+ xmlOutputBufferWrite(buf, 5, "UTF-8");
+ }
+ xmlOutputBufferWrite(buf, 4, "\" />");
+ }
if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL)) {
xmlOutputBufferWriteEscape(buf, cur->content, ctxt->escape);
}
@@ -1830,15 +1873,6 @@ xmlNodeDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur,
is_xhtml = xmlIsXHTML(dtd->SystemID, dtd->ExternalID);
if (is_xhtml < 0)
is_xhtml = 0;
- if ((is_xhtml) && (cur->parent == (xmlNodePtr) doc) &&
- (cur->type == XML_ELEMENT_NODE) &&
- (xmlStrEqual(cur->name, BAD_CAST "html"))) {
- if (encoding != NULL)
- htmlSetMetaEncoding((htmlDocPtr) doc,
- (const xmlChar *) encoding);
- else
- htmlSetMetaEncoding((htmlDocPtr) doc, BAD_CAST "UTF-8");
- }
}
if (is_xhtml)
diff --git a/xmlschemas.c b/xmlschemas.c
index afa7010..76bf3fd 100644
--- a/xmlschemas.c
+++ b/xmlschemas.c
@@ -66,9 +66,9 @@
/* #define ENABLE_PARTICLE_RESTRICTION 1 */
-#define DUMP_CONTENT_MODEL
+/* #define ENABLE_REDEFINE */
-#define XML_SCHEMA_SAX_ENABLED
+#define DUMP_CONTENT_MODEL
#ifdef LIBXML_READER_ENABLED
/* #define XML_SCHEMA_READER_ENABLED */
@@ -100,8 +100,6 @@ static const xmlChar *xmlSchemaElemDesAttrDecl = (const xmlChar *)
"attribute decl.";
static const xmlChar *xmlSchemaElemDesAttrRef = (const xmlChar *)
"attribute use";
-static const xmlChar *xmlSchemaElemDesCT = (const xmlChar *)
- "complex type";
static const xmlChar *xmlSchemaElemModelGrDef = (const xmlChar *)
"model group";
#if 0
@@ -199,19 +197,52 @@ typedef xmlSchemaAssemble *xmlSchemaAssemblePtr;
typedef struct _xmlSchemaItemList xmlSchemaItemList;
typedef xmlSchemaItemList *xmlSchemaItemListPtr;
-
struct _xmlSchemaItemList {
void **items; /* used for dynamic addition of schemata */
int nbItems; /* used for dynamic addition of schemata */
int sizeItems; /* used for dynamic addition of schemata */
};
+/*
+typedef struct _xmlSchemaItemListChain xmlSchemaItemListChain;
+typedef xmlSchemaItemListChain xmlSchemaItemListChainPtr;
+struct _xmlSchemaItemListChain {
+ xmlSchemaItemListChainPtr next;
+ xmlSchemaItemListPtr list;
+}
+*/
+
+/*
+typedef struct _xmlSchemaItemListChain xmlSchemaItemListChain;
+typedef xmlSchemaItemListChain xmlSchemaItemListChainPtr;
+struct _xmlSchemaItemListChain {
+ xmlSchemaItemListChainPtr next;
+ xmlSchemaItemListPtr list;
+}
+*/
+
typedef struct _xmlSchemaAbstractCtxt xmlSchemaAbstractCtxt;
typedef xmlSchemaAbstractCtxt *xmlSchemaAbstractCtxtPtr;
struct _xmlSchemaAbstractCtxt {
int type;
};
+/**
+ * xmlSchemaContainer:
+ */
+typedef struct _xmlSchemaContainer xmlSchemaContainer;
+typedef xmlSchemaContainer *xmlSchemaContainerPtr;
+struct _xmlSchemaContainer {
+ xmlSchemaItemListPtr typeDefs;
+ xmlSchemaItemListPtr attrDecls;
+ xmlSchemaItemListPtr elemDecls;
+ xmlSchemaItemListPtr attrGroupDefs;
+ xmlSchemaItemListPtr modelGroupDefs;
+ xmlSchemaItemListPtr notationDecls;
+ xmlSchemaItemListPtr annotations;
+ xmlSchemaItemListPtr locals;
+};
+
#define XML_SCHEMA_CTXT_PARSER 1
#define XML_SCHEMA_CTXT_VALIDATOR 2
@@ -224,8 +255,8 @@ struct _xmlSchemaParserCtxt {
int nberrors;
xmlStructuredErrorFunc serror;
- xmlSchemaPtr topschema; /* The main schema */
- xmlHashTablePtr namespaces; /* Hash table of namespaces to schemas */
+ /* xmlSchemaPtr topschema; The main schema */
+ /* xmlHashTablePtr namespaces; Hash table of namespaces to schemas */
xmlSchemaPtr schema; /* The schema in use */
const xmlChar *container; /* the current element, group, ... */
@@ -258,6 +289,8 @@ struct _xmlSchemaParserCtxt {
int nbLocalImports;
xmlHashTablePtr substGroups;
int isS4S;
+ int isRedefine;
+ xmlSchemaContainerPtr compContainer;
};
#define XML_SCHEMAS_ATTR_UNKNOWN 1
@@ -289,6 +322,26 @@ struct _xmlSchemaBasicItem {
xmlSchemaTypeType type;
};
+#define XML_SCHEMA_SCHEMA_REF_IMPORT 1
+#define XML_SCHEMA_SCHEMA_REF_INCLUDE 2
+#define XML_SCHEMA_SCHEMA_REF_REDEFINE 3
+
+#define XML_SCHEMA_SCHEMA_REF_REL_CHILD 1
+#define XML_SCHEMA_SCHEMA_REF_REL_PARENT 2
+/**
+ * xmlSchemaSchemaRef:
+ *
+ * Used to create a graph of schema relationships.
+ */
+typedef struct _xmlSchemaSchemaRef xmlSchemaSchemaRef;
+typedef xmlSchemaSchemaRef *xmlSchemaSchemaRefPtr;
+struct _xmlSchemaSchemaRef {
+ xmlSchemaSchemaRefPtr next;
+ int type; /* E.g. XML_SCHEMA_SCHEMA_REF_IMPORT */
+ int relation;
+ xmlSchemaPtr schema;
+};
+
/**
* xmlSchemaAnnotItem:
*
@@ -462,6 +515,9 @@ typedef xmlSchemaPSVIIDCNode *xmlSchemaPSVIIDCNodePtr;
struct _xmlSchemaPSVIIDCNode {
xmlNodePtr node;
xmlSchemaPSVIIDCKeyPtr *keys;
+ int nodeLine;
+ int nodeQNameID;
+
};
/**
@@ -552,14 +608,17 @@ struct _xmlSchemaIDCMatcher {
* Holds information of an element node.
*/
struct _xmlSchemaNodeInfo {
- xmlNodePtr node;
int nodeType;
+ xmlNodePtr node;
+ int nodeLine;
const xmlChar *localName;
const xmlChar *nsName;
const xmlChar *value;
xmlSchemaValPtr val; /* the pre-computed value if any */
xmlSchemaTypePtr typeDef; /* the complex/simple type definition if any */
+
int flags; /* combination of node info flags */
+
int valNeeded;
int normVal;
@@ -588,8 +647,9 @@ struct _xmlSchemaNodeInfo {
typedef struct _xmlSchemaAttrInfo xmlSchemaAttrInfo;
typedef xmlSchemaAttrInfo *xmlSchemaAttrInfoPtr;
struct _xmlSchemaAttrInfo {
- xmlNodePtr node;
int nodeType;
+ xmlNodePtr node;
+ int nodeLine;
const xmlChar *localName;
const xmlChar *nsName;
const xmlChar *value;
@@ -674,6 +734,7 @@ struct _xmlSchemaValidCtxt {
int sizeAttrInfos;
int skipDepth;
+ xmlSchemaItemListPtr nodeQNames;
};
/*
@@ -722,6 +783,11 @@ struct _xmlSchemaSubstGroup {
static int xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt,
xmlSchemaPtr schema,
xmlNodePtr node);
+#ifdef ENABLE_REDEFINE
+static int xmlSchemaParseRedefine(xmlSchemaParserCtxtPtr ctxt,
+ xmlSchemaPtr schema,
+ xmlNodePtr node);
+#endif
static void
xmlSchemaTypeFixup(xmlSchemaTypePtr typeDecl,
xmlSchemaParserCtxtPtr ctxt, const xmlChar * name);
@@ -796,6 +862,16 @@ xmlSchemaCompTypeToString(xmlSchemaTypeType type)
return(BAD_CAST "model group (all)");
case XML_SCHEMA_TYPE_PARTICLE:
return(BAD_CAST "particle");
+ case XML_SCHEMA_TYPE_IDC_UNIQUE:
+ return(BAD_CAST "IDC (unique)");
+ case XML_SCHEMA_TYPE_IDC_KEY:
+ return(BAD_CAST "IDC (key)");
+ case XML_SCHEMA_TYPE_IDC_KEYREF:
+ return(BAD_CAST "IDC (keyref)");
+ case XML_SCHEMA_TYPE_ANY:
+ return(BAD_CAST "wildcard (any)");
+ case XML_SCHEMA_EXTRA_QNAMEREF:
+ return(BAD_CAST "[helper component] QName reference");
default:
return(BAD_CAST "Not a schema component");
}
@@ -1560,9 +1636,10 @@ xmlSchemaVErrMemory(xmlSchemaValidCtxtPtr ctxt,
* Handle a validation error
*/
static void
-xmlSchemaErr3(xmlSchemaAbstractCtxtPtr ctxt,
- int error, xmlNodePtr node, const char *msg,
- const xmlChar *str1, const xmlChar *str2, const xmlChar *str3)
+xmlSchemaErr3Line(xmlSchemaAbstractCtxtPtr ctxt,
+ int error, xmlNodePtr node, int line, const char *msg,
+ const xmlChar *str1, const xmlChar *str2,
+ const xmlChar *str3)
{
xmlStructuredErrorFunc schannel = NULL;
xmlGenericErrorFunc channel = NULL;
@@ -1571,7 +1648,6 @@ xmlSchemaErr3(xmlSchemaAbstractCtxtPtr ctxt,
if (ctxt != NULL) {
if (ctxt->type == XML_SCHEMA_CTXT_VALIDATOR) {
xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctxt;
- int line = 0;
const char *file = NULL;
vctxt->nberrors++;
@@ -1579,15 +1655,41 @@ xmlSchemaErr3(xmlSchemaAbstractCtxtPtr ctxt,
channel = vctxt->error;
schannel = vctxt->serror;
data = vctxt->userData;
- if ((node == NULL) && (vctxt->depth >= 0) &&
- (vctxt->inode != NULL)) {
- node = vctxt->inode->node;
- }
- if ((node == NULL) && (vctxt->parserCtxt != NULL) &&
- (vctxt->parserCtxt->input != NULL)) {
- file = vctxt->parserCtxt->input->filename;
- line = vctxt->parserCtxt->input->line;
- }
+
+ /*
+ * Error node. If we specify a line number, then
+ * do not channel any node to the error function.
+ */
+ if (line == 0) {
+ if ((node == NULL) &&
+ (vctxt->depth >= 0) &&
+ (vctxt->inode != NULL)) {
+ node = vctxt->inode->node;
+ }
+ /*
+ * Get filename and line if no node-tree.
+ */
+ if ((node == NULL) &&
+ (vctxt->parserCtxt != NULL) &&
+ (vctxt->parserCtxt->input != NULL)) {
+ file = vctxt->parserCtxt->input->filename;
+ line = vctxt->parserCtxt->input->line;
+ }
+ } else {
+ /*
+ * Override the given node's (if any) position
+ * and channel only the given line number.
+ */
+ node = NULL;
+ /*
+ * Get filename.
+ */
+ if (vctxt->doc != NULL)
+ file = (const char *) vctxt->doc->URL;
+ else if ((vctxt->parserCtxt != NULL) &&
+ (vctxt->parserCtxt->input != NULL))
+ file = vctxt->parserCtxt->input->filename;
+ }
__xmlRaiseError(schannel, channel, data, ctxt,
node, XML_FROM_SCHEMASV,
error, XML_ERR_ERROR, file, line,
@@ -1613,6 +1715,26 @@ xmlSchemaErr3(xmlSchemaAbstractCtxtPtr ctxt,
}
}
+/**
+ * xmlSchemaErr3:
+ * @ctxt: the validation context
+ * @node: the context node
+ * @error: the error code
+ * @msg: the error message
+ * @str1: extra data
+ * @str2: extra data
+ * @str3: extra data
+ *
+ * Handle a validation error
+ */
+static void
+xmlSchemaErr3(xmlSchemaAbstractCtxtPtr actxt,
+ int error, xmlNodePtr node, const char *msg,
+ const xmlChar *str1, const xmlChar *str2, const xmlChar *str3)
+{
+ xmlSchemaErr3Line(actxt, error, node, 0, msg, str1, str2, str3);
+}
+
static void
xmlSchemaErr(xmlSchemaAbstractCtxtPtr actxt,
int error, xmlNodePtr node, const char *msg,
@@ -1699,9 +1821,11 @@ xmlSchemaFormatNodeForError(xmlChar ** msg,
}
static void
-xmlSchemaInternalErr(xmlSchemaAbstractCtxtPtr actxt,
+xmlSchemaInternalErr2(xmlSchemaAbstractCtxtPtr actxt,
const char *funcName,
- const char *message)
+ const char *message,
+ const xmlChar *str1,
+ const xmlChar *str2)
{
xmlChar *msg = NULL;
@@ -1713,16 +1837,35 @@ xmlSchemaInternalErr(xmlSchemaAbstractCtxtPtr actxt,
if (actxt->type == XML_SCHEMA_CTXT_VALIDATOR)
xmlSchemaErr(actxt, XML_SCHEMAV_INTERNAL, NULL,
- (const char *) msg, NULL, NULL);
+ (const char *) msg, str1, str2);
- else if (actxt->type == XML_SCHEMA_CTXT_PARSER)
+ else if (actxt->type == XML_SCHEMA_CTXT_PARSER)
xmlSchemaErr(actxt, XML_SCHEMAP_INTERNAL, NULL,
- (const char *) msg, NULL, NULL);
+ (const char *) msg, str1, str2);
FREE_AND_NULL(msg)
}
static void
+xmlSchemaInternalErr(xmlSchemaAbstractCtxtPtr actxt,
+ const char *funcName,
+ const char *message)
+{
+ xmlSchemaInternalErr2(actxt, funcName, message, NULL, NULL);
+}
+
+static void
+xmlSchemaPInternalErr(xmlSchemaParserCtxtPtr pctxt,
+ const char *funcName,
+ const char *message,
+ const xmlChar *str1,
+ const xmlChar *str2)
+{
+ xmlSchemaInternalErr2((xmlSchemaAbstractCtxtPtr) pctxt, funcName, message,
+ str1, str2);
+}
+
+static void
xmlSchemaCustomErr(xmlSchemaAbstractCtxtPtr actxt,
xmlParserErrors error,
xmlNodePtr node,
@@ -1741,6 +1884,30 @@ xmlSchemaCustomErr(xmlSchemaAbstractCtxtPtr actxt,
FREE_AND_NULL(msg)
}
+static void
+xmlSchemaKeyrefErr(xmlSchemaValidCtxtPtr vctxt,
+ xmlParserErrors error,
+ xmlSchemaPSVIIDCNodePtr idcNode,
+ xmlSchemaTypePtr type ATTRIBUTE_UNUSED,
+ const char *message,
+ const xmlChar *str1,
+ const xmlChar *str2)
+{
+ xmlChar *msg = NULL, *qname = NULL;
+
+ msg = xmlStrdup(BAD_CAST "Element '%s': ");
+ msg = xmlStrcat(msg, (const xmlChar *) message);
+ msg = xmlStrcat(msg, BAD_CAST ".\n");
+ xmlSchemaErr3Line((xmlSchemaAbstractCtxtPtr) vctxt,
+ error, NULL, idcNode->nodeLine, (const char *) msg,
+ xmlSchemaFormatQName(&qname,
+ vctxt->nodeQNames->items[idcNode->nodeQNameID +1],
+ vctxt->nodeQNames->items[idcNode->nodeQNameID]),
+ str1, str2);
+ FREE_AND_NULL(qname);
+ FREE_AND_NULL(msg);
+}
+
static int
xmlSchemaEvalErrorNodeType(xmlSchemaAbstractCtxtPtr actxt,
xmlNodePtr node)
@@ -1879,7 +2046,7 @@ xmlSchemaComplexTypeErr(xmlSchemaAbstractCtxtPtr actxt,
xmlChar *str = NULL, *msg = NULL;
xmlChar *localName, *nsName;
const xmlChar *cur, *end;
- int i;
+ int i, is_not;
xmlSchemaFormatNodeForError(&msg, actxt, node);
msg = xmlStrcat(msg, (const xmlChar *) message);
@@ -1898,6 +2065,16 @@ xmlSchemaComplexTypeErr(xmlSchemaAbstractCtxtPtr actxt,
for (i = 0; i < nbval + nbneg; i++) {
cur = values[i];
+ if (cur == NULL)
+ continue;
+ if ((cur[0] == 'n') && (cur[1] == 'o') && (cur[2] == 't') &&
+ (cur[3] == ' ')) {
+ is_not = 1;
+ cur += 4;
+ str = xmlStrcat(str, BAD_CAST "##other");
+ } else {
+ is_not = 0;
+ }
/*
* Get the local name.
*/
@@ -2088,6 +2265,7 @@ xmlSchemaFacetErr(xmlSchemaAbstractCtxtPtr actxt,
#define VERROR_INT(func, msg) xmlSchemaInternalErr((xmlSchemaAbstractCtxtPtr) vctxt, func, msg);
#define PERROR_INT(func, msg) xmlSchemaInternalErr((xmlSchemaAbstractCtxtPtr) pctxt, func, msg);
+#define PERROR_INT2(func, msg) xmlSchemaInternalErr((xmlSchemaAbstractCtxtPtr) ctxt, func, msg);
#define AERROR_INT(func, msg) xmlSchemaInternalErr(actxt, func, msg);
@@ -2537,8 +2715,10 @@ xmlSchemaPSimpleTypeErr(xmlSchemaParserCtxtPtr ctxt,
else
xmlSchemaPErr(ctxt, node, error, (const char *) msg, NULL, NULL);
} else {
+ msg = xmlStrcat(msg, BAD_CAST message);
+ msg = xmlStrcat(msg, BAD_CAST ".\n");
xmlSchemaPErrExt(ctxt, node, error, NULL, NULL, NULL,
- "%s%s.\n", msg, BAD_CAST message, str1, str2, NULL);
+ (const char*) msg, str1, str2, NULL, NULL, NULL);
}
/* Cleanup. */
FREE_AND_NULL(msg)
@@ -2711,7 +2891,7 @@ xmlSchemaNewAnnot(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node)
}
static xmlSchemaItemListPtr
-xmlSchemaNewItemList(void)
+xmlSchemaItemListCreate(void)
{
xmlSchemaItemListPtr ret;
@@ -2725,6 +2905,98 @@ xmlSchemaNewItemList(void)
return (ret);
}
+static void
+xmlSchemaItemListClear(xmlSchemaItemListPtr list)
+{
+ if (list->items != NULL) {
+ xmlFree(list->items);
+ list->items = NULL;
+ }
+ list->nbItems = 0;
+ list->sizeItems = 0;
+}
+
+static int
+xmlSchemaItemListAdd(xmlSchemaItemListPtr list, void *item)
+{
+ if (list->items == NULL) {
+ list->items = (void **) xmlMalloc(
+ 20 * sizeof(void *));
+ if (list->items == NULL) {
+ xmlSchemaPErrMemory(NULL, "allocating new item list", NULL);
+ return(-1);
+ }
+ list->sizeItems = 20;
+ } else if (list->sizeItems <= list->nbItems) {
+ list->sizeItems *= 2;
+ list->items = (void **) xmlRealloc(list->items,
+ list->sizeItems * sizeof(void *));
+ if (list->items == NULL) {
+ xmlSchemaPErrMemory(NULL, "growing item list", NULL);
+ list->sizeItems = 0;
+ return(-1);
+ }
+ }
+ /* ((xmlSchemaBasicItemPtr *) list->items)[list->nbItems++] = (void *) item; */
+ list->items[list->nbItems++] = item;
+ return(0);
+}
+
+/**
+ * xmlSchemaItemListFree:
+ * @annot: a schema type structure
+ *
+ * Deallocate a annotation structure
+ */
+static void
+xmlSchemaItemListFree(xmlSchemaItemListPtr list)
+{
+ if (list == NULL)
+ return;
+ if (list->items != NULL)
+ xmlFree(list->items);
+ xmlFree(list);
+}
+
+static xmlSchemaContainerPtr
+xmlSchemaContainerCreate(void)
+{
+ xmlSchemaContainerPtr ret;
+
+ ret = (xmlSchemaContainerPtr) xmlMalloc(sizeof(xmlSchemaContainer));
+ if (ret == NULL) {
+ xmlSchemaPErrMemory(NULL, "allocating component container",
+ NULL);
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaContainer));
+ return(ret);
+}
+
+static void
+xmlSchemaContainerFree(xmlSchemaContainerPtr cont)
+{
+ if (cont == NULL)
+ return;
+ if (cont->typeDefs != NULL)
+ xmlSchemaItemListFree(cont->typeDefs);
+ if (cont->attrDecls != NULL)
+ xmlSchemaItemListFree(cont->attrDecls);
+ if (cont->elemDecls != NULL)
+ xmlSchemaItemListFree(cont->elemDecls);
+ if (cont->attrGroupDefs != NULL)
+ xmlSchemaItemListFree(cont->attrGroupDefs);
+ if (cont->modelGroupDefs != NULL)
+ xmlSchemaItemListFree(cont->modelGroupDefs);
+ if (cont->notationDecls != NULL)
+ xmlSchemaItemListFree(cont->notationDecls);
+ if (cont->annotations != NULL)
+ xmlSchemaItemListFree(cont->annotations);
+ if (cont->locals != NULL)
+ xmlSchemaItemListFree(cont->locals);
+ xmlFree(cont);
+}
+
/**
* xmlSchemaAddElementSubstitutionMember:
* @pctxt: a schema parser context
@@ -2763,7 +3035,7 @@ xmlSchemaAddElementSubstitutionMember(xmlSchemaParserCtxtPtr pctxt,
NULL);
return (-1);
}
- substGroup->members = xmlSchemaNewItemList();
+ substGroup->members = xmlSchemaItemListCreate();
if (substGroup->members == NULL) {
xmlFree(substGroup);
return (-1);
@@ -2835,22 +3107,6 @@ xmlSchemaGetElementSubstitutionGroup(xmlSchemaParserCtxtPtr pctxt,
}
/**
- * xmlSchemaFreeItemList:
- * @annot: a schema type structure
- *
- * Deallocate a annotation structure
- */
-static void
-xmlSchemaFreeItemList(xmlSchemaItemListPtr list)
-{
- if (list == NULL)
- return;
- if (list->items != NULL)
- xmlFree(list->items);
- xmlFree(list);
-}
-
-/**
* xmlSchemaFreeAnnot:
* @annot: a schema type structure
*
@@ -2861,7 +3117,17 @@ xmlSchemaFreeAnnot(xmlSchemaAnnotPtr annot)
{
if (annot == NULL)
return;
- xmlFree(annot);
+ if (annot->next == NULL) {
+ xmlFree(annot);
+ } else {
+ xmlSchemaAnnotPtr prev;
+
+ do {
+ prev = annot;
+ annot = annot->next;
+ xmlFree(prev);
+ } while (annot != NULL);
+ }
}
/**
@@ -3043,7 +3309,7 @@ xmlSchemaFreeSubstGroup(xmlSchemaSubstGroupPtr item)
if (item == NULL)
return;
if (item->members != NULL)
- xmlSchemaFreeItemList(item->members);
+ xmlSchemaItemListFree(item->members);
xmlFree(item);
}
@@ -3051,39 +3317,15 @@ static int
xmlSchemaAddVolatile(xmlSchemaPtr schema,
xmlSchemaBasicItemPtr item)
{
- xmlSchemaItemListPtr list;
-
if (schema->volatiles == NULL) {
- schema->volatiles = (void *) xmlSchemaNewItemList();
+ schema->volatiles = (void *) xmlSchemaItemListCreate();
if (schema->volatiles == NULL) {
xmlSchemaPErrMemory(NULL,
"allocating list of volatiles", NULL);
return (-1);
}
}
- list = (xmlSchemaItemListPtr) schema->volatiles;
- if (list->items == NULL) {
- list->items = (void **) xmlMalloc(
- 20 * sizeof(xmlSchemaBasicItemPtr));
- if (list->items == NULL) {
- xmlSchemaPErrMemory(NULL,
- "allocating new volatile item buffer", NULL);
- return (-1);
- }
- list->sizeItems = 20;
- } else if (list->sizeItems <= list->nbItems) {
- list->sizeItems *= 2;
- list->items = (void **) xmlRealloc(list->items,
- list->sizeItems * sizeof(xmlSchemaTypePtr));
- if (list->items == NULL) {
- xmlSchemaPErrMemory(NULL,
- "growing volatile item buffer", NULL);
- list->sizeItems = 0;
- return (-1);
- }
- }
- ((xmlSchemaBasicItemPtr *) list->items)[list->nbItems++] = (void *) item;
- return (0);
+ return(xmlSchemaItemListAdd((xmlSchemaItemListPtr) schema->volatiles, item));
}
/**
@@ -3218,6 +3460,9 @@ xmlSchemaFreeType(xmlSchemaTypePtr type)
}
}
if (type->type != XML_SCHEMA_TYPE_BASIC) {
+ /*
+ * TODO: Why is this restricted to non built-in types?
+ */
if (type->attributeUses != NULL)
xmlSchemaFreeAttributeUseList(type->attributeUses);
}
@@ -3333,7 +3578,7 @@ xmlSchemaFreeVolatiles(xmlSchemaPtr schema)
}
}
}
- xmlSchemaFreeItemList(list);
+ xmlSchemaItemListFree(list);
}
}
/**
@@ -3894,35 +4139,19 @@ xmlSchemaGetProp(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
*/
static xmlSchemaElementPtr
xmlSchemaGetElem(xmlSchemaPtr schema, const xmlChar * name,
- const xmlChar * namespace)
+ const xmlChar * nsName)
{
xmlSchemaElementPtr ret;
if ((name == NULL) || (schema == NULL))
return (NULL);
- ret = xmlHashLookup2(schema->elemDecl, name, namespace);
+ ret = xmlHashLookup2(schema->elemDecl, name, nsName);
if ((ret != NULL) &&
(ret->flags & XML_SCHEMAS_ELEM_GLOBAL)) {
return (ret);
} else
ret = NULL;
- /*
- * This one was removed, since top level element declarations have
- * the target namespace specified in targetNamespace of the <schema>
- * information element, even if elementFormDefault is "unqualified".
- */
-
- /* else if ((schema->flags & XML_SCHEMAS_QUALIF_ELEM) == 0) {
- if (xmlStrEqual(namespace, schema->targetNamespace))
- ret = xmlHashLookup2(schema->elemDecl, name, NULL);
- else
- ret = xmlHashLookup2(schema->elemDecl, name, namespace);
- if ((ret != NULL) &&
- ((level == 0) || (ret->flags & XML_SCHEMAS_ELEM_TOPLEVEL))) {
- return (ret);
- }
- */
/*
* Removed since imported components will be hold by the main schema only.
@@ -3963,18 +4192,25 @@ xmlSchemaGetElem(xmlSchemaPtr schema, const xmlChar * name,
*/
static xmlSchemaTypePtr
xmlSchemaGetType(xmlSchemaPtr schema, const xmlChar * name,
- const xmlChar * namespace)
+ const xmlChar * nsName)
{
xmlSchemaTypePtr ret;
if (name == NULL)
return (NULL);
if (schema != NULL) {
- ret = xmlHashLookup2(schema->typeDecl, name, namespace);
- if ((ret != NULL) && (ret->flags & XML_SCHEMAS_TYPE_GLOBAL))
+ ret = xmlHashLookup2(schema->typeDecl, name, nsName);
+ if ((ret != NULL) && (ret->flags & XML_SCHEMAS_TYPE_GLOBAL)) {
+ if (ret->redef != NULL) {
+ /*
+ * Return the last redefinition.
+ */
+ return(ret->redef);
+ }
return (ret);
+ }
}
- ret = xmlSchemaGetPredefinedType(name, namespace);
+ ret = xmlSchemaGetPredefinedType(name, nsName);
if (ret != NULL)
return (ret);
/*
@@ -3994,14 +4230,14 @@ xmlSchemaGetType(xmlSchemaPtr schema, const xmlChar * name,
*/
#ifdef DEBUG
if (ret == NULL) {
- if (namespace == NULL)
+ if (nsName == NULL)
fprintf(stderr, "Unable to lookup type %s", name);
else
fprintf(stderr, "Unable to lookup type %s:%s", name,
- namespace);
+ nsName);
}
#endif
- return (ret);
+ return (NULL);
}
/**
@@ -4548,8 +4784,8 @@ xmlSchemaAddElement(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
*/
static xmlSchemaTypePtr
xmlSchemaAddType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- const xmlChar * name, const xmlChar * namespace,
- xmlNodePtr node)
+ const xmlChar * name, const xmlChar * nsName,
+ xmlNodePtr node, int topLevel)
{
xmlSchemaTypePtr ret = NULL;
int val;
@@ -4557,12 +4793,6 @@ xmlSchemaAddType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
if ((ctxt == NULL) || (schema == NULL) || (name == NULL))
return (NULL);
-#ifdef DEBUG
- fprintf(stderr, "Adding type %s\n", name);
- if (namespace != NULL)
- fprintf(stderr, " target namespace %s\n", namespace);
-#endif
-
if (schema->typeDecl == NULL)
schema->typeDecl = xmlHashCreateDict(10, ctxt->dict);
if (schema->typeDecl == NULL)
@@ -4576,25 +4806,37 @@ xmlSchemaAddType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
memset(ret, 0, sizeof(xmlSchemaType));
ret->name = xmlDictLookup(ctxt->dict, name, -1);
ret->redef = NULL;
- val = xmlHashAddEntry2(schema->typeDecl, name, namespace, ret);
+ val = xmlHashAddEntry2(schema->typeDecl, name, nsName, ret);
if (val != 0) {
- if (ctxt->includes == 0) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_REDEFINED_TYPE,
- NULL, NULL, node,
- "A global type definition with the name '%s' does already exist", name);
+ if (! ctxt->isRedefine) {
+ xmlChar *str = NULL;
+ if (topLevel) {
+ xmlSchemaPCustomErr(ctxt,
+ XML_SCHEMAP_REDEFINED_TYPE,
+ NULL, NULL, node,
+ "A global type definition with the name '%s' does "
+ "already exist",
+ xmlSchemaFormatQName(&str, nsName, name));
+ } else {
+ xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_INTERNAL,
+ NULL, NULL, node, "Internal error: xmlSchemaAddType, "
+ "local type '%s' has a duplicate",
+ xmlSchemaFormatQName(&str, nsName, name));
+ }
xmlFree(ret);
+ FREE_AND_NULL(str);
return (NULL);
} else {
xmlSchemaTypePtr prev;
- prev = xmlHashLookup2(schema->typeDecl, name, namespace);
+ /*
+ * REDEFINE: Add a redefinition.
+ */
+ TODO
+ prev = xmlHashLookup2(schema->typeDecl, name, nsName);
if (prev == NULL) {
- xmlSchemaPErr(ctxt, (xmlNodePtr) ctxt->doc,
- XML_ERR_INTERNAL_ERROR,
- "Internal error: xmlSchemaAddType, on type "
- "'%s'.\n",
- name, NULL);
+ PERROR_INT2("xmlSchemaAddType", "hash list didn't return "
+ "a type component, but should");
xmlFree(ret);
return (NULL);
}
@@ -4977,7 +5219,7 @@ xmlSchemaPValAttrNodeQNameValue(xmlSchemaParserCtxtPtr ctxt,
return (-1);
if (!strchr((char *) value, ':')) {
- ns = xmlSearchNs(attr->doc, attr->parent, 0);
+ ns = xmlSearchNs(attr->doc, attr->parent, NULL);
if (ns)
*uri = xmlDictLookup(ctxt->dict, ns->href, -1);
else if (schema->flags & XML_SCHEMAS_INCLUDING_CONVERT_NS) {
@@ -8048,6 +8290,7 @@ xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
xmlNodePtr child = NULL;
const xmlChar *attrValue = NULL;
xmlAttrPtr attr;
+ int hasRestriction = 0;
if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
return (NULL);
@@ -8071,6 +8314,18 @@ xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
if (ctxt->isS4S) {
xmlSchemaTypePtr biType;
+ if (ctxt->isRedefine) {
+ /*
+ * REDEFINE: Disallow redefinition of built-in-types.
+ * TODO: It seems that the spec does not say anything
+ * about this case.
+ */
+ xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_SRC_REDEFINE,
+ NULL, NULL, node,
+ "Redefinition of built-in simple types is not "
+ "supported", NULL);
+ return(NULL);
+ }
biType = xmlSchemaGetPredefinedType(attrValue, xmlSchemaNs);
if (biType != NULL)
return (biType);
@@ -8085,7 +8340,8 @@ xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
* Parse as local simple type definition.
*/
snprintf(buf, 39, "#ST%d", ctxt->counter++ + 1);
- type = xmlSchemaAddType(ctxt, schema, (const xmlChar *)buf, NULL, node);
+ type = xmlSchemaAddType(ctxt, schema, (const xmlChar *)buf, NULL,
+ node, 0);
if (type == NULL)
return (NULL);
type->node = node;
@@ -8115,7 +8371,8 @@ xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
*
* Note that attrValue is the value of the attribute "name" here.
*/
- type = xmlSchemaAddType(ctxt, schema, attrValue, schema->targetNamespace, node);
+ type = xmlSchemaAddType(ctxt, schema, attrValue,
+ schema->targetNamespace, node, 1);
if (type == NULL)
return (NULL);
type->node = node;
@@ -8186,9 +8443,10 @@ xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
xmlSchemaPContentErr(ctxt, XML_SCHEMAP_S4S_ELEM_MISSING,
NULL, type, node, child, NULL,
"(annotation?, (restriction | list | union))");
- } else if (IS_SCHEMA(child, "restriction")) {
+ } else if (IS_SCHEMA(child, "restriction")) {
xmlSchemaParseRestriction(ctxt, schema, child,
- XML_SCHEMA_TYPE_SIMPLE);
+ XML_SCHEMA_TYPE_SIMPLE);
+ hasRestriction = 1;
child = child->next;
} else if (IS_SCHEMA(child, "list")) {
xmlSchemaParseList(ctxt, schema, child);
@@ -8202,9 +8460,21 @@ xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
NULL, type, node, child, NULL,
"(annotation?, (restriction | list | union))");
}
+ /*
+ * 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
+ * name attribute plus target namespace;"
+ */
+ if (topLevel && ctxt->isRedefine && (! hasRestriction)) {
+ xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_SRC_REDEFINE,
+ NULL, NULL, node, "This is a redefinition, thus the "
+ "<simpleType> must have a <restriction> child", NULL);
+ }
+
ctxt->parentItem = oldParentItem;
ctxt->ctxtType = oldCtxtType;
-
return (type);
}
@@ -8476,73 +8746,6 @@ xmlSchemaCleanupDoc(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr root)
}
-/**
- * xmlSchemaImportSchema
- *
- * @ctxt: a schema validation context
- * @schemaLocation: an URI defining where to find the imported schema
- *
- * import a XML schema
- * *WARNING* this interface is highly subject to change
- *
- * Returns -1 in case of error and 1 in case of success.
- */
-#if 0
-static xmlSchemaImportPtr
-xmlSchemaImportSchema(xmlSchemaParserCtxtPtr ctxt,
- const xmlChar *schemaLocation)
-{
- xmlSchemaImportPtr import;
- xmlSchemaParserCtxtPtr newctxt;
-
- newctxt = (xmlSchemaParserCtxtPtr) xmlMalloc(sizeof(xmlSchemaParserCtxt));
- if (newctxt == NULL) {
- xmlSchemaPErrMemory(ctxt, "allocating schema parser context",
- NULL);
- return (NULL);
- }
- memset(newctxt, 0, sizeof(xmlSchemaParserCtxt));
- /* Keep the same dictionnary for parsing, really */
- xmlDictReference(ctxt->dict);
- newctxt->dict = ctxt->dict;
- newctxt->includes = 0;
- newctxt->URL = xmlDictLookup(newctxt->dict, schemaLocation, -1);
-
- xmlSchemaSetParserErrors(newctxt, ctxt->error, ctxt->warning,
- ctxt->userData);
-
- import = (xmlSchemaImport*) xmlMalloc(sizeof(xmlSchemaImport));
- if (import == NULL) {
- xmlSchemaPErrMemory(NULL, "allocating imported schema",
- NULL);
- xmlSchemaFreeParserCtxt(newctxt);
- return (NULL);
- }
-
- memset(import, 0, sizeof(xmlSchemaImport));
- import->schemaLocation = xmlDictLookup(ctxt->dict, schemaLocation, -1);
- import->schema = xmlSchemaParse(newctxt);
-
- if (import->schema == NULL) {
- /* FIXME use another error enum here ? */
- xmlSchemaPErr(ctxt, NULL, XML_SCHEMAP_INTERNAL,
- "Failed to import schema from location \"%s\".\n",
- schemaLocation, NULL);
-
- xmlSchemaFreeParserCtxt(newctxt);
- /* The schemaLocation is held by the dictionary.
- if (import->schemaLocation != NULL)
- xmlFree((xmlChar *)import->schemaLocation);
- */
- xmlFree(import);
- return NULL;
- }
-
- xmlSchemaFreeParserCtxt(newctxt);
- return import;
-}
-#endif
-
static void
xmlSchemaClearSchemaDefaults(xmlSchemaPtr schema)
{
@@ -8679,7 +8882,11 @@ xmlSchemaParseSchemaTopLevel(xmlSchemaParserCtxtPtr ctxt,
xmlSchemaParseInclude(ctxt, schema, child);
ctxt->includes--;
} else if (IS_SCHEMA(child, "redefine")) {
+#ifdef ENABLE_REDEFINE
+ xmlSchemaParseRedefine(ctxt, schema, child);
+#else
TODO
+#endif
}
child = child->next;
}
@@ -8756,6 +8963,49 @@ xmlSchemaAddImport(xmlSchemaParserCtxtPtr ctxt,
return (ret);
}
+#ifdef ENABLE_REDEFINE
+static xmlSchemaSchemaRefPtr
+xmlSchemaSchemaRefCreate(void)
+{
+ xmlSchemaSchemaRefPtr ret;
+
+ ret = (xmlSchemaSchemaRefPtr) xmlMalloc(sizeof(xmlSchemaSchemaRef));
+ if (ret == NULL) {
+ xmlSchemaPErrMemory(NULL, "allocating schema reference", NULL);
+ return(NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaSchemaRef));
+ return(ret);
+}
+
+static void
+xmlSchemaSchemaRefFree(xmlSchemaSchemaRefPtr ref)
+{
+ xmlFree(ref);
+}
+#endif
+
+static xmlSchemaParserCtxtPtr
+xmlSchemaParserCtxtCreate(void)
+{
+ xmlSchemaParserCtxtPtr ret;
+
+ ret = (xmlSchemaParserCtxtPtr) xmlMalloc(sizeof(xmlSchemaParserCtxt));
+ if (ret == NULL) {
+ xmlSchemaPErrMemory(NULL, "allocating schema parser context",
+ NULL);
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaParserCtxt));
+ ret->type = XML_SCHEMA_CTXT_PARSER;
+ ret->compContainer = xmlSchemaContainerCreate();
+ if (ret->compContainer == NULL) {
+ xmlSchemaFreeParserCtxt(ret);
+ return(NULL);
+ }
+ return(ret);
+}
+
/**
* xmlSchemaNewParserCtxtUseDict:
* @URL: the location of the schema
@@ -8770,18 +9020,10 @@ static xmlSchemaParserCtxtPtr
xmlSchemaNewParserCtxtUseDict(const char *URL, xmlDictPtr dict)
{
xmlSchemaParserCtxtPtr ret;
- /*
- if (URL == NULL)
- return (NULL);
- */
- ret = (xmlSchemaParserCtxtPtr) xmlMalloc(sizeof(xmlSchemaParserCtxt));
- if (ret == NULL) {
- xmlSchemaPErrMemory(NULL, "allocating schema parser context",
- NULL);
+ ret = xmlSchemaParserCtxtCreate();
+ if (ret == NULL)
return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaParserCtxt));
ret->dict = dict;
xmlDictReference(dict);
if (URL != NULL)
@@ -9053,14 +9295,17 @@ xmlSchemaParseForImpInc(xmlSchemaParserCtxtPtr pctxt,
oldURL = pctxt->URL;
/* TODO: Is using the doc->URL here correct? */
pctxt->URL = node->doc->URL;
+
oldLocImps = pctxt->localImports;
pctxt->localImports = NULL;
oldNumLocImps = pctxt->nbLocalImports;
pctxt->nbLocalImports = 0;
oldSizeLocImps = pctxt->sizeLocalImports;
pctxt->sizeLocalImports = 0;
+
oldFlags = schema->flags;
oldIsS4S = pctxt->isS4S;
+
xmlSchemaClearSchemaDefaults(schema);
oldTNS = schema->targetNamespace;
schema->targetNamespace = targetNamespace;
@@ -9103,7 +9348,7 @@ xmlSchemaParseForImpInc(xmlSchemaParserCtxtPtr pctxt,
* not valid and -1 in case of an internal error.
*/
static int
-xmlSchemaParseImport(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
+xmlSchemaParseImport(xmlSchemaParserCtxtPtr pctxt, xmlSchemaPtr schema,
xmlNodePtr node)
{
xmlNodePtr child;
@@ -9114,7 +9359,7 @@ xmlSchemaParseImport(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
xmlDocPtr doc;
int ret = 0;
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
return (-1);
/*
@@ -9126,12 +9371,12 @@ xmlSchemaParseImport(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
(!xmlStrEqual(attr->name, BAD_CAST "namespace")) &&
(!xmlStrEqual(attr->name, BAD_CAST "schemaLocation"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
+ xmlSchemaPIllegalAttrErr(pctxt,
XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED,
NULL, NULL, attr);
}
} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
+ xmlSchemaPIllegalAttrErr(pctxt,
XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED,
NULL, NULL, attr);
}
@@ -9140,26 +9385,26 @@ xmlSchemaParseImport(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
/*
* Extract and validate attributes.
*/
- if (xmlSchemaPValAttr(ctxt, NULL, NULL, node,
+ if (xmlSchemaPValAttr(pctxt, NULL, NULL, node,
"namespace", xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
&namespaceName) != 0) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI,
+ xmlSchemaPSimpleTypeErr(pctxt,
+ XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
NULL, node,
xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
NULL, namespaceName, NULL, NULL, NULL);
- return (XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI);
+ return (pctxt->err);
}
- if (xmlSchemaPValAttr(ctxt, NULL, NULL, node,
+ if (xmlSchemaPValAttr(pctxt, NULL, NULL, node,
"schemaLocation", xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
&schemaLocation) != 0) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI,
+ xmlSchemaPSimpleTypeErr(pctxt,
+ XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
NULL, node,
xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
NULL, namespaceName, NULL, NULL, NULL);
- return (XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI);
+ return (pctxt->err);
}
/*
* And now for the children...
@@ -9173,8 +9418,8 @@ xmlSchemaParseImport(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
child = child->next;
}
if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_UNKNOWN_IMPORT_CHILD,
+ xmlSchemaPContentErr(pctxt,
+ XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
NULL, NULL, node, child, NULL,
"(annotation?)");
}
@@ -9188,13 +9433,13 @@ xmlSchemaParseImport(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
* targetNamespace [attribute].
*/
if (xmlStrEqual(schema->targetNamespace, namespaceName)) {
- xmlSchemaPCustomErr(ctxt,
+ xmlSchemaPCustomErr(pctxt,
XML_SCHEMAP_SRC_IMPORT_1_1,
NULL, NULL, node,
"The value of the attribute 'namespace' must not match "
"the target namespace '%s' of the importing schema",
schema->targetNamespace);
- return (XML_SCHEMAP_SRC_IMPORT_1_1);
+ return (pctxt->err);
}
} else {
/*
@@ -9202,34 +9447,36 @@ xmlSchemaParseImport(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
* <schema> must have a targetNamespace [attribute].
*/
if (schema->targetNamespace == NULL) {
- xmlSchemaPCustomErr(ctxt,
+ xmlSchemaPCustomErr(pctxt,
XML_SCHEMAP_SRC_IMPORT_1_2,
NULL, NULL, node,
"The attribute 'namespace' must be existent if "
"the importing schema has no target namespace",
NULL);
- return (XML_SCHEMAP_SRC_IMPORT_1_2);
+ return (pctxt->err);
}
}
/*
* Add the namespace to the list of locally imported namespace.
+ * TODO: This could be removed if the schema-graph is ready. I.e.
+ * use the graph for this info instead.
*/
- if (ctxt->localImports == NULL) {
- ctxt->localImports = (const xmlChar **) xmlMalloc(10 *
+ if (pctxt->localImports == NULL) {
+ pctxt->localImports = (const xmlChar **) xmlMalloc(10 *
sizeof(const xmlChar*));
- ctxt->sizeLocalImports = 10;
- ctxt->nbLocalImports = 0;
- } else if (ctxt->sizeLocalImports <= ctxt->nbLocalImports) {
- ctxt->sizeLocalImports *= 2;
- ctxt->localImports = (const xmlChar **) xmlRealloc(
- (xmlChar **) ctxt->localImports,
- ctxt->sizeLocalImports * sizeof(const xmlChar*));
+ pctxt->sizeLocalImports = 10;
+ pctxt->nbLocalImports = 0;
+ } else if (pctxt->sizeLocalImports <= pctxt->nbLocalImports) {
+ pctxt->sizeLocalImports *= 2;
+ pctxt->localImports = (const xmlChar **) xmlRealloc(
+ (xmlChar **) pctxt->localImports,
+ pctxt->sizeLocalImports * sizeof(const xmlChar*));
}
- ctxt->localImports[ctxt->nbLocalImports++] = namespaceName;
+ pctxt->localImports[pctxt->nbLocalImports++] = namespaceName;
/*
* Locate and aquire the schema document.
*/
- ret = xmlSchemaAcquireSchemaDoc((xmlSchemaAbstractCtxtPtr) ctxt,
+ ret = xmlSchemaAcquireSchemaDoc((xmlSchemaAbstractCtxtPtr) pctxt,
schema, node, namespaceName,
schemaLocation, &doc, &targetNamespace, 0);
if (ret != 0) {
@@ -9237,7 +9484,7 @@ xmlSchemaParseImport(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
xmlFreeDoc(doc);
return (ret);
} else if (doc != NULL) {
- xmlSchemaParseForImpInc(ctxt, schema, targetNamespace,
+ xmlSchemaParseForImpInc(pctxt, schema, targetNamespace,
xmlDocGetRootElement(doc));
}
@@ -9245,120 +9492,31 @@ xmlSchemaParseImport(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
}
/**
- * xmlSchemaParseInclude:
- * @ctxt: a schema validation context
+ * xmlSchemaParseIncludedDoc:
+ * @pctxt: a schema validation context
* @schema: the schema being built
* @node: a subtree containing XML Schema informations
*
- * parse a XML schema Include definition
+ * Parse an included (and to-be-redefined) XML schema document.
*
- * Returns -1 in case of error, 0 if the declaration is improper and
- * 1 in case of success.
+ * Returns 0 on success, a positive error code on errors and
+ * -1 in case of an internal or API error.
*/
static int
-xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node)
+xmlSchemaParseIncludedDoc(xmlSchemaParserCtxtPtr pctxt, xmlSchemaPtr schema,
+ xmlNodePtr node, const xmlChar *schemaLocation,
+ int *located)
{
- xmlNodePtr child = NULL;
- const xmlChar *schemaLocation, *targetNamespace;
+ const xmlChar *targetNamespace;
xmlDocPtr doc = NULL;
xmlNodePtr root = NULL;
xmlSchemaIncludePtr include = NULL;
int wasConvertingNs = 0;
- xmlAttrPtr attr;
xmlParserCtxtPtr parserCtxt;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (-1);
-
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "schemaLocation"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED,
- NULL, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED,
- NULL, NULL, attr);
- }
- attr = attr->next;
- }
- /*
- * Extract and validate attributes.
- */
- xmlSchemaPValAttrID(ctxt, NULL, NULL, node, BAD_CAST "id");
- /*
- * Preliminary step, extract the URI-Reference for the include and
- * make an URI from the base.
- */
- attr = xmlSchemaGetPropNode(node, "schemaLocation");
- if (attr != NULL) {
- xmlChar *base = NULL;
- xmlChar *uri = NULL;
-
- if (xmlSchemaPValAttrNode(ctxt, NULL, NULL, attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI), &schemaLocation) != 0)
- goto exit_invalid;
- base = xmlNodeGetBase(node->doc, node);
- if (base == NULL) {
- uri = xmlBuildURI(schemaLocation, node->doc->URL);
- } else {
- uri = xmlBuildURI(schemaLocation, base);
- xmlFree(base);
- }
- if (uri == NULL) {
- xmlSchemaPErr(ctxt,
- node,
- XML_SCHEMAP_INTERNAL,
- "Internal error: xmlSchemaParseInclude, "
- "could not build an URI from the schemaLocation.\n",
- NULL, NULL);
- goto exit_failure;
- }
- schemaLocation = xmlDictLookup(ctxt->dict, uri, -1);
- xmlFree(uri);
- } else {
- xmlSchemaPMissingAttrErr(ctxt,
- XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI,
- NULL, node, "schemaLocation", NULL);
- goto exit_invalid;
- }
- /*
- * And now for the children...
- */
- child = node->children;
- while (IS_SCHEMA(child, "annotation")) {
- /*
- * the annotations here are simply discarded ...
- * TODO: really?
- */
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD,
- NULL, NULL, node, child, NULL,
- "(annotation?)");
- }
- /*
- * Report self-inclusion.
- */
- if (xmlStrEqual(schemaLocation, ctxt->URL)) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_SRC_INCLUDE,
- NULL, NULL, node,
- "The schema document '%s' cannot include itself.",
- schemaLocation);
- return (XML_SCHEMAP_SRC_INCLUDE);
- }
+ if (located == NULL)
+ return(-1);
+ (*located) = 0;
/*
* Check if this one was already processed to avoid incorrect
* duplicate component errors and infinite circular inclusion.
@@ -9366,6 +9524,7 @@ xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
include = schema->includes;
while (include != NULL) {
if (xmlStrEqual(include->schemaLocation, schemaLocation)) {
+ (*located) = 1;
targetNamespace = include->origTargetNamespace;
if (targetNamespace == NULL) {
/*
@@ -9376,7 +9535,7 @@ xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
include->targetNamespace)) {
goto check_targetNamespace;
}
- } else {
+ } else {
goto check_targetNamespace;
}
}
@@ -9393,60 +9552,50 @@ xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
goto exit_failure;
}
- if ((ctxt->dict != NULL) && (parserCtxt->dict != NULL)) {
+ if ((pctxt->dict != NULL) && (parserCtxt->dict != NULL)) {
xmlDictFree(parserCtxt->dict);
- parserCtxt->dict = ctxt->dict;
+ parserCtxt->dict = pctxt->dict;
xmlDictReference(parserCtxt->dict);
}
doc = xmlCtxtReadFile(parserCtxt, (const char *) schemaLocation,
NULL, SCHEMAS_PARSE_OPTIONS);
xmlFreeParserCtxt(parserCtxt);
- if (doc == NULL) {
- /*
- * TODO: 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?
- */
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_FAILED_LOAD,
- NULL, NULL, node,
- "Failed to load the document '%s' for inclusion", schemaLocation);
- goto exit_invalid;
+ if (doc == NULL) {
+ goto exit_not_located;
}
-
+ (*located) = 1;
/*
* Then extract the root of the schema
*/
root = xmlDocGetRootElement(doc);
if (root == NULL) {
- xmlSchemaPCustomErr(ctxt,
+ xmlSchemaPCustomErr(pctxt,
XML_SCHEMAP_NOROOT,
NULL, NULL, node,
"The included document '%s' has no document "
"element", schemaLocation);
- goto exit_invalid;
+ goto exit_error;
}
/*
* Remove all the blank text nodes
*/
- xmlSchemaCleanupDoc(ctxt, root);
+ xmlSchemaCleanupDoc(pctxt, root);
/*
* Check the schemas top level element
*/
if (!IS_SCHEMA(root, "schema")) {
- xmlSchemaPCustomErr(ctxt,
+ xmlSchemaPCustomErr(pctxt,
XML_SCHEMAP_NOT_SCHEMA,
NULL, NULL, node,
"The document '%s' to be included is not a schema document",
schemaLocation);
- goto exit_invalid;
+ goto exit_error;
}
- targetNamespace = xmlSchemaGetProp(ctxt, root, "targetNamespace");
+ targetNamespace = xmlSchemaGetProp(pctxt, root, "targetNamespace");
/*
* 2.1 SII has a targetNamespace [attribute], and its ·actual
* value· is identical to the ·actual value· of the targetNamespace
@@ -9455,22 +9604,22 @@ xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
check_targetNamespace:
if (targetNamespace != NULL) {
if (schema->targetNamespace == NULL) {
- xmlSchemaPCustomErr(ctxt,
+ xmlSchemaPCustomErr(pctxt,
XML_SCHEMAP_SRC_INCLUDE,
NULL, NULL, node,
"The target namespace of the included schema "
"'%s' has to be absent, since the including schema "
"has no target namespace",
schemaLocation);
- goto exit_invalid;
+ goto exit_error;
} else if (!xmlStrEqual(targetNamespace, schema->targetNamespace)) {
- xmlSchemaPCustomErrExt(ctxt,
+ xmlSchemaPCustomErrExt(pctxt,
XML_SCHEMAP_SRC_INCLUDE,
NULL, NULL, node,
"The target namespace '%s' of the included schema '%s' "
"differs from '%s' of the including schema",
targetNamespace, schemaLocation, schema->targetNamespace);
- goto exit_invalid;
+ goto exit_error;
}
} else if (schema->targetNamespace != NULL) {
if ((schema->flags & XML_SCHEMAS_INCLUDING_CONVERT_NS) == 0) {
@@ -9491,13 +9640,14 @@ check_targetNamespace:
* the moment.
* TODO: Check when the namespace in wildcards for chameleons needs
* to be converted: before we built wildcard intersections or after.
+ * Answer: after!
*/
/*
* Register the include.
*/
include = (xmlSchemaIncludePtr) xmlMalloc(sizeof(xmlSchemaInclude));
if (include == NULL) {
- xmlSchemaPErrMemory(ctxt, "allocating include entry", NULL);
+ xmlSchemaPErrMemory(pctxt, "allocating include entry", NULL);
goto exit_failure;
}
memset(include, 0, sizeof(xmlSchemaInclude));
@@ -9529,7 +9679,7 @@ check_targetNamespace:
/*
* Compile the included schema.
*/
- xmlSchemaParseForImpInc(ctxt, schema, schema->targetNamespace, root);
+ xmlSchemaParseForImpInc(pctxt, schema, schema->targetNamespace, root);
exit:
/*
@@ -9538,15 +9688,18 @@ exit:
if ((wasConvertingNs == 0) &&
(schema->flags & XML_SCHEMAS_INCLUDING_CONVERT_NS))
schema->flags ^= XML_SCHEMAS_INCLUDING_CONVERT_NS;
- return (1);
+ return (0);
-exit_invalid:
+exit_error:
if (doc != NULL) {
if (include != NULL)
include->doc = NULL;
xmlFreeDoc(doc);
}
- return (ctxt->err);
+ return (pctxt->err);
+
+exit_not_located:
+ return(0);
exit_failure:
if (doc != NULL) {
@@ -9557,6 +9710,259 @@ exit_failure:
return (-1);
}
+
+static int
+xmlSchemaParseIncludeOrRedefineAttrs(xmlSchemaParserCtxtPtr pctxt,
+ xmlSchemaPtr schema,
+ xmlNodePtr node,
+ xmlChar **schemaLocation,
+ int isRedefine)
+{
+ xmlAttrPtr attr;
+
+ if ((pctxt == NULL) || (schema == NULL) || (node == NULL) ||
+ (schemaLocation == NULL))
+ return (-1);
+
+ *schemaLocation = NULL;
+ /*
+ * Check for illegal attributes.
+ * Applies for both <include> and <redefine>.
+ */
+ attr = node->properties;
+ while (attr != NULL) {
+ if (attr->ns == NULL) {
+ if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
+ (!xmlStrEqual(attr->name, BAD_CAST "schemaLocation"))) {
+ xmlSchemaPIllegalAttrErr(pctxt,
+ XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED,
+ NULL, NULL, attr);
+ }
+ } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
+ xmlSchemaPIllegalAttrErr(pctxt,
+ XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED,
+ NULL, NULL, attr);
+ }
+ attr = attr->next;
+ }
+ xmlSchemaPValAttrID(pctxt, NULL, NULL, node, BAD_CAST "id");
+ /*
+ * Preliminary step, extract the URI-Reference and make an URI
+ * from the base.
+ */
+ /*
+ * Attribute "schemaLocation" is mandatory.
+ */
+ attr = xmlSchemaGetPropNode(node, "schemaLocation");
+ if (attr != NULL) {
+ xmlChar *base = NULL;
+ xmlChar *uri = NULL;
+
+ if (xmlSchemaPValAttrNode(pctxt, NULL, NULL, attr,
+ xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
+ (const xmlChar **) schemaLocation) != 0)
+ goto exit_error;
+ base = xmlNodeGetBase(node->doc, node);
+ if (base == NULL) {
+ uri = xmlBuildURI(*schemaLocation, node->doc->URL);
+ } else {
+ uri = xmlBuildURI(*schemaLocation, base);
+ xmlFree(base);
+ }
+ if (uri == NULL) {
+ PERROR_INT("xmlSchemaParseIncludeOrRedefine",
+ "could not build an URI from the schemaLocation")
+ goto exit_failure;
+ }
+ (*schemaLocation) = (xmlChar *) xmlDictLookup(pctxt->dict, uri, -1);
+ xmlFree(uri);
+ } else {
+ xmlSchemaPMissingAttrErr(pctxt,
+ XML_SCHEMAP_S4S_ATTR_MISSING,
+ NULL, node, "schemaLocation", NULL);
+ goto exit_error;
+ }
+ /*
+ * Report self-inclusion and self-redefinition.
+ */
+ if (xmlStrEqual(*schemaLocation, pctxt->URL)) {
+ if (isRedefine) {
+ xmlSchemaPCustomErr(pctxt,
+ XML_SCHEMAP_SRC_REDEFINE,
+ NULL, NULL, node,
+ "The schema document '%s' cannot redefine itself.",
+ *schemaLocation);
+ } else {
+ xmlSchemaPCustomErr(pctxt,
+ XML_SCHEMAP_SRC_INCLUDE,
+ NULL, NULL, node,
+ "The schema document '%s' cannot include itself.",
+ *schemaLocation);
+ }
+ goto exit_error;
+ }
+
+ return(0);
+exit_error:
+ return(pctxt->err);
+exit_failure:
+ return(-1);
+}
+
+static int
+xmlSchemaParseIncludeOrRedefine(xmlSchemaParserCtxtPtr pctxt,
+ xmlSchemaPtr schema,
+ xmlNodePtr node,
+ int isRedefine)
+{
+ xmlNodePtr child = NULL;
+ const xmlChar *schemaLocation = NULL;
+ int res = 0, located = 0, hasRedefinitions = 0;
+
+ if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
+ return (-1);
+
+ /*
+ * Parse attributes. Note that the returned schemaLocation will
+ * be already converted to an absolute URI.
+ */
+ res = xmlSchemaParseIncludeOrRedefineAttrs(pctxt, schema,
+ node, (xmlChar **) (&schemaLocation), isRedefine);
+ if (res != 0)
+ return(res);
+
+ /*
+ * Include the schema.
+ */
+ res = xmlSchemaParseIncludedDoc(pctxt, schema, node,
+ schemaLocation, &located);
+ if (res != 0)
+ return(res);
+
+ /*
+ * And now for the children...
+ */
+ child = node->children;
+
+ if (isRedefine) {
+ /*
+ * Parse (simpleType | complexType | group | attributeGroup))*
+ */
+ pctxt->isRedefine = 1;
+ while (IS_SCHEMA(child, "annotation") ||
+ IS_SCHEMA(child, "simpleType") ||
+ IS_SCHEMA(child, "complexType") ||
+ IS_SCHEMA(child, "group") ||
+ IS_SCHEMA(child, "attributeGroup")) {
+ if (IS_SCHEMA(child, "annotation")) {
+ /*
+ * TODO: discard or not?
+ */
+ } else if (IS_SCHEMA(child, "simpleType")) {
+ xmlSchemaParseSimpleType(pctxt, schema, child, 1);
+ } else if (IS_SCHEMA(child, "complexType")) {
+ xmlSchemaParseComplexType(pctxt, schema, child, 1);
+ hasRedefinitions = 1;
+ } else if (IS_SCHEMA(child, "group")) {
+ TODO
+ hasRedefinitions = 1;
+ /* xmlSchemaParseModelGroupDefinition(pctxt, schema, child); */
+ } else if (IS_SCHEMA(child, "attributeGroup")) {
+ TODO
+ hasRedefinitions = 1;
+ /* xmlSchemaParseAttributeGroup(pctxt, schema, child, 1); */
+ }
+ child = child->next;
+ }
+ pctxt->isRedefine = 0;
+ } else {
+ if (IS_SCHEMA(child, "annotation")) {
+ /*
+ * TODO: discard or not?
+ */
+ child = child->next;
+ }
+ }
+ if (child != NULL) {
+ res = XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED;
+ if (isRedefine) {
+ xmlSchemaPContentErr(pctxt,
+ res,
+ NULL, NULL, node, child, NULL,
+ "(annotation | (simpleType | complexType | group | attributeGroup))*");
+ } else {
+ xmlSchemaPContentErr(pctxt,
+ res,
+ NULL, NULL, node, child, NULL,
+ "(annotation?)");
+ }
+ }
+ if (!located) {
+ /*
+ * TODO: This is all *not* yet OK, since we get a !located if the
+ * document was not an XML document as well :-(
+ */
+ if (!isRedefine) {
+ /*
+ * WARNING for <include>:
+ * We will raise an error if the schema cannot be located
+ * 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
+ * schemaLocation [attribute] to fail to resolve it all, in which
+ * case no corresponding inclusion is performed.
+ * So do we need a warning report here?"
+ */
+ res = XML_SCHEMAP_SRC_INCLUDE;
+ xmlSchemaPCustomErr(pctxt, res,
+ NULL, NULL, node,
+ "Failed to load the document '%s' for inclusion",
+ schemaLocation);
+ } else if (hasRedefinitions) {
+ /*
+ * SPEC src-redefine (1)
+ * "If there are any element information items among the [children]
+ * other than <annotation> then the ·actual value· of the
+ * schemaLocation [attribute] must successfully resolve."
+ * TODO: Ask the WG if a the location has to resolve here as well!
+ */
+ res = XML_SCHEMAP_SRC_REDEFINE;
+ xmlSchemaPCustomErr(pctxt, res,
+ NULL, NULL, node,
+ "Failed to load the document '%s' for redefinition",
+ schemaLocation);
+ }
+ }
+ return(res);
+}
+
+#ifdef ENABLE_REDEFINE
+static int
+xmlSchemaParseRedefine(xmlSchemaParserCtxtPtr pctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ int res;
+
+ res = xmlSchemaParseIncludeOrRedefine(pctxt, schema, node, 1);
+ if (res != 0)
+ return(res);
+ return(0);
+}
+#endif
+
+static int
+xmlSchemaParseInclude(xmlSchemaParserCtxtPtr pctxt, xmlSchemaPtr schema,
+ xmlNodePtr node)
+{
+ int res;
+
+ res = xmlSchemaParseIncludeOrRedefine(pctxt, schema, node, 0);
+ if (res != 0)
+ return(res);
+ return(0);
+}
+
/**
* xmlSchemaParseModelGroup:
* @ctxt: a schema validation context
@@ -9805,22 +10211,54 @@ xmlSchemaParseRestriction(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
*/
xmlSchemaPValAttrID(ctxt, NULL, NULL, node, BAD_CAST "id");
/*
- * Attribute "base" - mandatory if inside a complex type.
+ * Attribute
*/
/*
- * SPEC (1.2) "otherwise (<restriction> has no <simpleType> "
+ * Extract the base type. The "base" attribute is mandatory if inside
+ * a complex type or if redefining.
+ *
+ * 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]"
*/
- if ((xmlSchemaPValAttrQName(ctxt, schema,
+ if (xmlSchemaPValAttrQName(ctxt, schema,
NULL, NULL, node, "base",
- &(type->baseNs), &(type->base)) == 0) &&
- (type->base == NULL) &&
- (type->type == XML_SCHEMA_TYPE_COMPLEX)) {
- xmlSchemaPMissingAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- type, node, "base", NULL);
+ &(type->baseNs), &(type->base)) == 0)
+ {
+ if ((type->base == NULL) && (type->type == XML_SCHEMA_TYPE_COMPLEX)) {
+ xmlSchemaPMissingAttrErr(ctxt,
+ XML_SCHEMAP_S4S_ATTR_MISSING,
+ type, node, "base", NULL);
+ } else if ((ctxt->isRedefine) &&
+ (type->flags & XML_SCHEMAS_TYPE_GLOBAL))
+ {
+ if (type->base == NULL) {
+ xmlSchemaPMissingAttrErr(ctxt,
+ XML_SCHEMAP_S4S_ATTR_MISSING,
+ type, node, "base", NULL);
+ } else if ((! xmlStrEqual(type->base, type->name)) ||
+ (! xmlStrEqual(type->baseNs, type->targetNamespace)))
+ {
+ xmlChar *str1 = NULL, *str2 = NULL;
+ /*
+ * 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 name attribute plus target namespace;"
+ */
+ xmlSchemaPCustomErrExt(ctxt, XML_SCHEMAP_SRC_REDEFINE,
+ NULL, NULL, node, "This is a redefinition, but the QName "
+ "value '%s' of the 'base' attribute does not match the "
+ "type's designation '%s'",
+ xmlSchemaFormatQName(&str1, type->baseNs, type->base),
+ xmlSchemaFormatQName(&str1, type->targetNamespace,
+ type->name), NULL);
+ FREE_AND_NULL(str1);
+ FREE_AND_NULL(str2);
+ }
+ }
}
/*
* And now for the children...
@@ -10174,14 +10612,17 @@ xmlSchemaParseExtension(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
*/
static int
xmlSchemaParseSimpleContent(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema, xmlNodePtr node)
+ xmlSchemaPtr schema, xmlNodePtr node,
+ int *hasRestrictionOrExtension)
{
xmlSchemaTypePtr type;
xmlNodePtr child = NULL;
xmlAttrPtr attr;
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL) ||
+ (hasRestrictionOrExtension == NULL))
return (-1);
+ *hasRestrictionOrExtension = 0;
/* Not a component, don't create it. */
type = ctxt->ctxtType;
type->contentType = XML_SCHEMA_CONTENT_SIMPLE;
@@ -10218,13 +10659,27 @@ xmlSchemaParseSimpleContent(xmlSchemaParserCtxtPtr ctxt,
xmlSchemaParseAnnotation(ctxt, schema, child));
child = child->next;
}
+ if (child == NULL) {
+ xmlSchemaPContentErr(ctxt,
+ XML_SCHEMAP_S4S_ELEM_MISSING,
+ NULL, NULL, node, NULL, NULL,
+ "(annotation?, (restriction | extension))");
+ }
+ if (child == NULL) {
+ xmlSchemaPContentErr(ctxt,
+ XML_SCHEMAP_S4S_ELEM_MISSING,
+ NULL, NULL, node, NULL, NULL,
+ "(annotation?, (restriction | extension))");
+ }
if (IS_SCHEMA(child, "restriction")) {
xmlSchemaParseRestriction(ctxt, schema, child,
XML_SCHEMA_TYPE_SIMPLE_CONTENT);
+ (*hasRestrictionOrExtension) = 1;
child = child->next;
} else if (IS_SCHEMA(child, "extension")) {
xmlSchemaParseExtension(ctxt, schema, child,
XML_SCHEMA_TYPE_SIMPLE_CONTENT);
+ (*hasRestrictionOrExtension) = 1;
child = child->next;
}
if (child != NULL) {
@@ -10249,14 +10704,17 @@ xmlSchemaParseSimpleContent(xmlSchemaParserCtxtPtr ctxt,
*/
static int
xmlSchemaParseComplexContent(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema, xmlNodePtr node)
+ xmlSchemaPtr schema, xmlNodePtr node,
+ int *hasRestrictionOrExtension)
{
xmlSchemaTypePtr type;
xmlNodePtr child = NULL;
xmlAttrPtr attr;
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
+ if ((ctxt == NULL) || (schema == NULL) || (node == NULL) ||
+ (hasRestrictionOrExtension == NULL))
return (-1);
+ *hasRestrictionOrExtension = 0;
/* Not a component, don't create it. */
type = ctxt->ctxtType;
/*
@@ -10298,13 +10756,27 @@ xmlSchemaParseComplexContent(xmlSchemaParserCtxtPtr ctxt,
xmlSchemaParseAnnotation(ctxt, schema, child));
child = child->next;
}
+ if (child == NULL) {
+ xmlSchemaPContentErr(ctxt,
+ XML_SCHEMAP_S4S_ELEM_MISSING,
+ NULL, NULL, node, NULL,
+ NULL, "(annotation?, (restriction | extension))");
+ }
+ if (child == NULL) {
+ xmlSchemaPContentErr(ctxt,
+ XML_SCHEMAP_S4S_ELEM_MISSING,
+ NULL, NULL, node, NULL,
+ NULL, "(annotation?, (restriction | extension))");
+ }
if (IS_SCHEMA(child, "restriction")) {
xmlSchemaParseRestriction(ctxt, schema, child,
XML_SCHEMA_TYPE_COMPLEX_CONTENT);
+ (*hasRestrictionOrExtension) = 1;
child = child->next;
} else if (IS_SCHEMA(child, "extension")) {
xmlSchemaParseExtension(ctxt, schema, child,
XML_SCHEMA_TYPE_COMPLEX_CONTENT);
+ (*hasRestrictionOrExtension) = 1;
child = child->next;
}
if (child != NULL) {
@@ -10336,9 +10808,8 @@ xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
const xmlChar *oldcontainer, *name = NULL;
xmlAttrPtr attr;
const xmlChar *attrValue;
- xmlChar *des = NULL; /* The reported designation. */
char buf[40];
- int final = 0, block = 0;
+ int final = 0, block = 0, hasRestrictionOrExtension = 0;
if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
@@ -10353,10 +10824,10 @@ xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
XML_SCHEMAP_S4S_ATTR_MISSING, NULL, node, "name", NULL);
return (NULL);
} else if (xmlSchemaPValAttrNode(ctxt,
- (xmlChar **) &xmlSchemaElemDesCT, NULL, attr,
+ NULL, NULL, attr,
xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &name) != 0) {
return (NULL);
- }
+ }
}
if (topLevel == 0) {
@@ -10364,7 +10835,8 @@ xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
* Parse as local complex type definition.
*/
snprintf(buf, 39, "#CT%d", ctxt->counter++ + 1);
- type = xmlSchemaAddType(ctxt, schema, (const xmlChar *)buf, NULL, node);
+ type = xmlSchemaAddType(ctxt, schema, (const xmlChar *)buf, NULL,
+ node, 0);
if (type == NULL)
return (NULL);
name = type->name;
@@ -10377,7 +10849,8 @@ xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
/*
* Parse as global complex type definition.
*/
- type = xmlSchemaAddType(ctxt, schema, name, schema->targetNamespace, node);
+ type = xmlSchemaAddType(ctxt, schema, name, schema->targetNamespace,
+ node, 1);
if (type == NULL)
return (NULL);
type->node = node;
@@ -10401,7 +10874,7 @@ xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
/*
* Attribute "mixed".
*/
- if (xmlSchemaPGetBoolNodeValue(ctxt, &des, type,
+ if (xmlSchemaPGetBoolNodeValue(ctxt, NULL, type,
(xmlNodePtr) attr))
type->flags |= XML_SCHEMAS_TYPE_MIXED;
} else if (topLevel) {
@@ -10414,7 +10887,7 @@ xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
/*
* Attribute "abstract".
*/
- if (xmlSchemaPGetBoolNodeValue(ctxt, &des, type,
+ if (xmlSchemaPGetBoolNodeValue(ctxt, NULL, type,
(xmlNodePtr) attr))
type->flags |= XML_SCHEMAS_TYPE_ABSTRACT;
} else if (xmlStrEqual(attr->name, BAD_CAST "final")) {
@@ -10458,17 +10931,17 @@ xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
} else {
xmlSchemaPIllegalAttrErr(ctxt,
XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED,
- &des, type, attr);
+ NULL, type, attr);
}
} else {
xmlSchemaPIllegalAttrErr(ctxt,
XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED,
- &des, type, attr);
+ NULL, type, attr);
}
} else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
xmlSchemaPIllegalAttrErr(ctxt,
XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED,
- &des, type, attr);
+ NULL, type, attr);
}
attr = attr->next;
}
@@ -10503,20 +10976,28 @@ xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
ctxt->ctxtType = type;
if (IS_SCHEMA(child, "simpleContent")) {
/*
+ * <complexType><simpleContent>...
* 3.4.3 : 2.2
* Specifying mixed='true' when the <simpleContent>
* alternative is chosen has no effect
*/
if (type->flags & XML_SCHEMAS_TYPE_MIXED)
type->flags ^= XML_SCHEMAS_TYPE_MIXED;
- xmlSchemaParseSimpleContent(ctxt, schema, child);
+ xmlSchemaParseSimpleContent(ctxt, schema, child,
+ &hasRestrictionOrExtension);
child = child->next;
} else if (IS_SCHEMA(child, "complexContent")) {
+ /*
+ * <complexType><complexContent>...
+ */
type->contentType = XML_SCHEMA_CONTENT_EMPTY;
- xmlSchemaParseComplexContent(ctxt, schema, child);
+ xmlSchemaParseComplexContent(ctxt, schema, child,
+ &hasRestrictionOrExtension);
child = child->next;
} else {
/*
+ * E.g <complexType><sequence>... or <complexType><attribute>... etc.
+ *
* SPEC
* "...the third alternative (neither <simpleContent> nor
* <complexContent>) is chosen. This case is understood as shorthand
@@ -10563,12 +11044,20 @@ xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
if (child != NULL) {
xmlSchemaPContentErr(ctxt,
XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- &des, type, node, child,
+ NULL, type, node, child,
NULL, "(annotation?, (simpleContent | complexContent | "
"((group | all | choice | sequence)?, ((attribute | "
"attributeGroup)*, anyAttribute?))))");
}
- FREE_AND_NULL(des);
+ /*
+ * REDEFINE: SPEC src-redefine (5)
+ */
+ if (topLevel && ctxt->isRedefine && (! hasRestrictionOrExtension)) {
+ xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_SRC_REDEFINE,
+ NULL, NULL, node, "This is a redefinition, thus the "
+ "<complexType> must have a <restriction> or <extension> "
+ "grand-child", NULL);
+ }
ctxt->container = oldcontainer;
ctxt->ctxtType = ctxtType;
return (type);
@@ -10605,6 +11094,9 @@ xmlSchemaParseSchema(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node)
ctxt->isS4S = 0;
if (IS_SCHEMA(node, "schema")) {
xmlSchemaImportPtr import;
+#ifdef ENABLE_REDEFINE
+ xmlSchemaSchemaRefPtr ref;
+#endif
schema = xmlSchemaNewSchema(ctxt);
if (schema == NULL)
@@ -10632,14 +11124,23 @@ xmlSchemaParseSchema(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node)
* if all schemata are constructed dynamically fired by the
* instance or if the schema to be used was specified via
* the API.
+ * TODO
*/
+#ifdef ENABLE_REDEFINE
+ ref = xmlSchemaSchemaRefCreate();
+ if (ref == NULL) {
+ xmlSchemaFree(schema);
+ schema = NULL;
+ return NULL;
+ }
+ ref->schema = schema;
+#endif
+
import = xmlSchemaAddImport(ctxt, &(schema->schemasImports),
schema->targetNamespace);
if (import == NULL) {
- xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_FAILED_BUILD_IMPORT,
- NULL, NULL, (xmlNodePtr) ctxt->doc,
- "Internal error: xmlSchemaParseSchema, "
- "failed to add an import entry", NULL);
+ xmlSchemaPInternalErr(ctxt, "xmlSchemaParseSchema",
+ "failed to add an import entry", NULL, NULL);
xmlSchemaFree(schema);
schema = NULL;
return (NULL);
@@ -10764,14 +11265,9 @@ xmlSchemaNewParserCtxt(const char *URL)
if (URL == NULL)
return (NULL);
- ret = (xmlSchemaParserCtxtPtr) xmlMalloc(sizeof(xmlSchemaParserCtxt));
- if (ret == NULL) {
- xmlSchemaPErrMemory(NULL, "allocating schema parser context",
- NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaParserCtxt));
- ret->type = XML_SCHEMA_CTXT_PARSER;
+ ret = xmlSchemaParserCtxtCreate();
+ if (ret == NULL)
+ return(NULL);
ret->dict = xmlDictCreate();
ret->URL = xmlDictLookup(ret->dict, (const xmlChar *) URL, -1);
ret->includes = 0;
@@ -10795,17 +11291,12 @@ xmlSchemaNewMemParserCtxt(const char *buffer, int size)
if ((buffer == NULL) || (size <= 0))
return (NULL);
-
- ret = (xmlSchemaParserCtxtPtr) xmlMalloc(sizeof(xmlSchemaParserCtxt));
- if (ret == NULL) {
- xmlSchemaPErrMemory(NULL, "allocating schema parser context",
- NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaParserCtxt));
+ ret = xmlSchemaParserCtxtCreate();
+ if (ret == NULL)
+ return(NULL);
ret->buffer = buffer;
ret->size = size;
- ret->dict = xmlDictCreate();
+ ret->dict = xmlDictCreate();
return (ret);
}
@@ -10825,14 +11316,9 @@ xmlSchemaNewDocParserCtxt(xmlDocPtr doc)
if (doc == NULL)
return (NULL);
-
- ret = (xmlSchemaParserCtxtPtr) xmlMalloc(sizeof(xmlSchemaParserCtxt));
- if (ret == NULL) {
- xmlSchemaPErrMemory(NULL, "allocating schema parser context",
- NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaParserCtxt));
+ ret = xmlSchemaParserCtxtCreate();
+ if (ret == NULL)
+ return(NULL);
ret->doc = doc;
ret->dict = xmlDictCreate();
/* The application has responsibility for the document */
@@ -10866,6 +11352,7 @@ xmlSchemaFreeParserCtxt(xmlSchemaParserCtxtPtr ctxt)
if (ctxt->substGroups != NULL)
xmlHashFree(ctxt->substGroups,
(xmlHashDeallocator) xmlSchemaFreeSubstGroup);
+ xmlSchemaContainerFree(ctxt->compContainer);
xmlDictFree(ctxt->dict);
xmlFree(ctxt);
}
@@ -10878,11 +11365,10 @@ xmlSchemaFreeParserCtxt(xmlSchemaParserCtxtPtr ctxt)
static void
xmlSchemaBuildContentModelForSubstGroup(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaParticlePtr particle)
+ xmlSchemaParticlePtr particle, int counter, xmlAutomataStatePtr end)
{
- xmlAutomataStatePtr start;
+ xmlAutomataStatePtr start, tmp;
xmlSchemaElementPtr elemDecl, member;
- xmlAutomataStatePtr end;
xmlSchemaSubstGroupPtr substGroup;
int i;
@@ -10891,7 +11377,8 @@ xmlSchemaBuildContentModelForSubstGroup(xmlSchemaParserCtxtPtr pctxt,
* Wrap the substitution group with a CHOICE.
*/
start = pctxt->state;
- end = xmlAutomataNewState(pctxt->am);
+ if (end == NULL)
+ end = xmlAutomataNewState(pctxt->am);
substGroup = xmlSchemaGetElementSubstitutionGroup(pctxt, elemDecl);
if (substGroup == NULL) {
xmlSchemaPErr(pctxt, GET_NODE(particle),
@@ -10901,7 +11388,22 @@ xmlSchemaBuildContentModelForSubstGroup(xmlSchemaParserCtxtPtr pctxt,
"available.\n", elemDecl->name, NULL);
return;
}
- if (particle->maxOccurs == 1) {
+ if (counter >= 0) {
+ /*
+ * NOTE that we put the declaration in, even if it's abstract,
+ */
+ tmp = xmlAutomataNewCountedTrans(pctxt->am, start, NULL, counter);
+ xmlAutomataNewTransition2(pctxt->am, tmp, end,
+ elemDecl->name, elemDecl->targetNamespace, elemDecl);
+ /*
+ * Add subst. group members.
+ */
+ for (i = 0; i < substGroup->members->nbItems; i++) {
+ member = (xmlSchemaElementPtr) substGroup->members->items[i];
+ xmlAutomataNewTransition2(pctxt->am, tmp, end,
+ member->name, member->targetNamespace, member);
+ }
+ } else if (particle->maxOccurs == 1) {
/*
* NOTE that we put the declaration in, even if it's abstract,
*/
@@ -10914,14 +11416,12 @@ xmlSchemaBuildContentModelForSubstGroup(xmlSchemaParserCtxtPtr pctxt,
*/
for (i = 0; i < substGroup->members->nbItems; i++) {
member = (xmlSchemaElementPtr) substGroup->members->items[i];
- xmlAutomataNewEpsilon(pctxt->am,
- xmlAutomataNewTransition2(pctxt->am,
- start, NULL,
- member->name, member->targetNamespace, member),
- end);
+ tmp = xmlAutomataNewOnceTrans2(pctxt->am, start, NULL,
+ member->name, member->targetNamespace,
+ 1, 1, member);
+ xmlAutomataNewEpsilon(pctxt->am, tmp, end);
}
} else {
- int counter;
xmlAutomataStatePtr hop;
int maxOccurs = particle->maxOccurs == UNBOUNDED ?
UNBOUNDED : particle->maxOccurs - 1;
@@ -10938,8 +11438,8 @@ xmlSchemaBuildContentModelForSubstGroup(xmlSchemaParserCtxtPtr pctxt,
elemDecl->name, elemDecl->targetNamespace, elemDecl),
hop);
/*
- * Add subst. group members.
- */
+ * Add subst. group members.
+ */
for (i = 0; i < substGroup->members->nbItems; i++) {
member = (xmlSchemaElementPtr) substGroup->members->items[i];
xmlAutomataNewEpsilon(pctxt->am,
@@ -10965,7 +11465,7 @@ xmlSchemaBuildContentModelForElement(xmlSchemaParserCtxtPtr ctxt,
/*
* Substitution groups.
*/
- xmlSchemaBuildContentModelForSubstGroup(ctxt, particle);
+ xmlSchemaBuildContentModelForSubstGroup(ctxt, particle, -1, NULL);
} else {
xmlSchemaElementPtr elemDecl;
xmlAutomataStatePtr start;
@@ -10977,8 +11477,9 @@ xmlSchemaBuildContentModelForElement(xmlSchemaParserCtxtPtr ctxt,
if (particle->maxOccurs == 1) {
start = ctxt->state;
ctxt->state = xmlAutomataNewTransition2(ctxt->am, start, NULL,
- elemDecl->name, elemDecl->targetNamespace, elemDecl);
- } else if ((particle->maxOccurs >= UNBOUNDED) && (particle->minOccurs < 2)) {
+ elemDecl->name, elemDecl->targetNamespace, elemDecl);
+ } else if ((particle->maxOccurs >= UNBOUNDED) &&
+ (particle->minOccurs < 2)) {
/* Special case. */
start = ctxt->state;
ctxt->state = xmlAutomataNewTransition2(ctxt->am, start, NULL,
@@ -11013,22 +11514,16 @@ xmlSchemaBuildContentModelForElement(xmlSchemaParserCtxtPtr ctxt,
* Generate the automata sequence needed for that type
*/
static void
-xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr ctxt,
+xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr pctxt,
xmlSchemaParticlePtr particle,
const xmlChar * name)
{
if (particle == NULL) {
- xmlSchemaPErr(ctxt, NULL,
- XML_SCHEMAP_INTERNAL,
- "Internal error: xmlSchemaBuildAContentModel, "
- "particle is NULL.\n", NULL, NULL);
+ PERROR_INT("xmlSchemaBuildAContentModel", "particle is NULL");
return;
}
if (particle->children == NULL) {
- xmlSchemaPErr(ctxt, GET_NODE(particle),
- XML_SCHEMAP_INTERNAL,
- "Internal error: xmlSchemaBuildAContentModel, "
- "no term on particle.\n", NULL, NULL);
+ PERROR_INT("xmlSchemaBuildAContentModel", "no term on particle");
return;
}
@@ -11040,8 +11535,8 @@ xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr ctxt,
wild = (xmlSchemaWildcardPtr) particle->children;
- start = ctxt->state;
- end = xmlAutomataNewState(ctxt->am);
+ start = pctxt->state;
+ end = xmlAutomataNewState(pctxt->am);
if (particle->maxOccurs == 1) {
if (wild->any == 1) {
@@ -11050,43 +11545,32 @@ xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr ctxt,
*
* 1. the {"*", "*"} for elements in a namespace.
*/
- ctxt->state =
- xmlAutomataNewTransition2(ctxt->am,
+ pctxt->state =
+ xmlAutomataNewTransition2(pctxt->am,
start, NULL, BAD_CAST "*", BAD_CAST "*", wild);
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, end);
+ xmlAutomataNewEpsilon(pctxt->am, pctxt->state, end);
/*
* 2. the {"*"} for elements in no namespace.
*/
- ctxt->state =
- xmlAutomataNewTransition2(ctxt->am,
+ pctxt->state =
+ xmlAutomataNewTransition2(pctxt->am,
start, NULL, BAD_CAST "*", NULL, wild);
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, end);
+ xmlAutomataNewEpsilon(pctxt->am, pctxt->state, end);
} else if (wild->nsSet != NULL) {
ns = wild->nsSet;
do {
- ctxt->state = start;
- ctxt->state = xmlAutomataNewTransition2(ctxt->am,
- ctxt->state, NULL, BAD_CAST "*", ns->value, wild);
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, end);
+ pctxt->state = start;
+ pctxt->state = xmlAutomataNewTransition2(pctxt->am,
+ pctxt->state, NULL, BAD_CAST "*", ns->value, wild);
+ xmlAutomataNewEpsilon(pctxt->am, pctxt->state, end);
ns = ns->next;
} while (ns != NULL);
} else if (wild->negNsSet != NULL) {
-
- /*
- * Lead nodes with the negated namespace to the sink-state
- * {"*", "##other"}.
- */
- ctxt->state = xmlAutomataNewTransition2(ctxt->am, start, NULL,
- BAD_CAST "*", wild->negNsSet->value, wild);
- /*
- * Open a door for nodes with any other namespace
- * {"*", "*"}
- */
- ctxt->state = xmlAutomataNewTransition2(ctxt->am,
- start, NULL, BAD_CAST "*", BAD_CAST "*", wild);
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, end);
+ pctxt->state = xmlAutomataNewNegTrans(pctxt->am,
+ start, end, BAD_CAST "*", wild->negNsSet->value,
+ wild);
}
} else {
int counter;
@@ -11096,48 +11580,43 @@ xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr ctxt,
int minOccurs =
particle->minOccurs < 1 ? 0 : particle->minOccurs - 1;
- counter = xmlAutomataNewCounter(ctxt->am, minOccurs, maxOccurs);
- hop = xmlAutomataNewState(ctxt->am);
+ counter = xmlAutomataNewCounter(pctxt->am, minOccurs, maxOccurs);
+ hop = xmlAutomataNewState(pctxt->am);
if (wild->any == 1) {
- ctxt->state =
- xmlAutomataNewTransition2(ctxt->am,
+ pctxt->state =
+ xmlAutomataNewTransition2(pctxt->am,
start, NULL, BAD_CAST "*", BAD_CAST "*", wild);
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, hop);
- ctxt->state =
- xmlAutomataNewTransition2(ctxt->am,
+ xmlAutomataNewEpsilon(pctxt->am, pctxt->state, hop);
+ pctxt->state =
+ xmlAutomataNewTransition2(pctxt->am,
start, NULL, BAD_CAST "*", NULL, wild);
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, hop);
+ xmlAutomataNewEpsilon(pctxt->am, pctxt->state, hop);
} else if (wild->nsSet != NULL) {
ns = wild->nsSet;
do {
- ctxt->state =
- xmlAutomataNewTransition2(ctxt->am,
+ pctxt->state =
+ xmlAutomataNewTransition2(pctxt->am,
start, NULL, BAD_CAST "*", ns->value, wild);
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, hop);
+ xmlAutomataNewEpsilon(pctxt->am, pctxt->state, hop);
ns = ns->next;
} while (ns != NULL);
} else if (wild->negNsSet != NULL) {
- xmlAutomataStatePtr deadEnd;
-
- deadEnd = xmlAutomataNewState(ctxt->am);
- ctxt->state = xmlAutomataNewTransition2(ctxt->am,
- start, deadEnd, BAD_CAST "*", wild->negNsSet->value, wild);
- ctxt->state = xmlAutomataNewTransition2(ctxt->am,
- start, NULL, BAD_CAST "*", BAD_CAST "*", wild);
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, hop);
+ pctxt->state = xmlAutomataNewNegTrans(pctxt->am,
+ start, hop, BAD_CAST "*", wild->negNsSet->value,
+ wild);
}
- xmlAutomataNewCountedTrans(ctxt->am, hop, start, counter);
- xmlAutomataNewCounterTrans(ctxt->am, hop, end, counter);
+ xmlAutomataNewCountedTrans(pctxt->am, hop, start, counter);
+ xmlAutomataNewCounterTrans(pctxt->am, hop, end, counter);
}
if (particle->minOccurs == 0) {
- xmlAutomataNewEpsilon(ctxt->am, start, end);
+ xmlAutomataNewEpsilon(pctxt->am, start, end);
}
- ctxt->state = end;
+ pctxt->state = end;
break;
}
case XML_SCHEMA_TYPE_ELEMENT:
- xmlSchemaBuildContentModelForElement(ctxt, particle);
+ xmlSchemaBuildContentModelForElement(pctxt, particle);
break;
case XML_SCHEMA_TYPE_SEQUENCE:{
xmlSchemaTreeItemPtr sub;
@@ -11149,50 +11628,61 @@ xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr ctxt,
if ((particle->minOccurs == 1) && (particle->maxOccurs == 1)) {
sub = particle->children->children;
while (sub != NULL) {
- xmlSchemaBuildAContentModel(ctxt,
+ xmlSchemaBuildAContentModel(pctxt,
(xmlSchemaParticlePtr) sub, name);
sub = sub->next;
}
} else {
- xmlAutomataStatePtr oldstate = ctxt->state;
+ xmlAutomataStatePtr oldstate = pctxt->state;
if (particle->maxOccurs >= UNBOUNDED) {
if (particle->minOccurs > 1) {
xmlAutomataStatePtr tmp;
int counter;
- ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
+ pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
oldstate, NULL);
- oldstate = ctxt->state;
+ oldstate = pctxt->state;
- counter = xmlAutomataNewCounter(ctxt->am,
+ counter = xmlAutomataNewCounter(pctxt->am,
particle->minOccurs - 1, UNBOUNDED);
sub = particle->children->children;
while (sub != NULL) {
- xmlSchemaBuildAContentModel(ctxt,
+ xmlSchemaBuildAContentModel(pctxt,
(xmlSchemaParticlePtr) sub, name);
sub = sub->next;
}
- tmp = ctxt->state;
- xmlAutomataNewCountedTrans(ctxt->am, tmp,
+ tmp = pctxt->state;
+ xmlAutomataNewCountedTrans(pctxt->am, tmp,
oldstate, counter);
- ctxt->state =
- xmlAutomataNewCounterTrans(ctxt->am, tmp,
+ pctxt->state =
+ xmlAutomataNewCounterTrans(pctxt->am, tmp,
NULL, counter);
} else {
+ pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
+ oldstate, NULL);
+ oldstate = pctxt->state;
+
sub = particle->children->children;
while (sub != NULL) {
- xmlSchemaBuildAContentModel(ctxt,
+ xmlSchemaBuildAContentModel(pctxt,
(xmlSchemaParticlePtr) sub, name);
sub = sub->next;
}
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state,
+ xmlAutomataNewEpsilon(pctxt->am, pctxt->state,
oldstate);
+ /*
+ * 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(ctxt->am,
- oldstate, ctxt->state);
+ xmlAutomataNewEpsilon(pctxt->am,
+ oldstate, pctxt->state);
}
}
} else if ((particle->maxOccurs > 1)
@@ -11200,40 +11690,40 @@ xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr ctxt,
xmlAutomataStatePtr tmp;
int counter;
- ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
+ pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
oldstate, NULL);
- oldstate = ctxt->state;
+ oldstate = pctxt->state;
- counter = xmlAutomataNewCounter(ctxt->am,
+ counter = xmlAutomataNewCounter(pctxt->am,
particle->minOccurs - 1,
particle->maxOccurs - 1);
sub = particle->children->children;
while (sub != NULL) {
- xmlSchemaBuildAContentModel(ctxt,
+ xmlSchemaBuildAContentModel(pctxt,
(xmlSchemaParticlePtr) sub, name);
sub = sub->next;
}
- tmp = ctxt->state;
- xmlAutomataNewCountedTrans(ctxt->am,
+ tmp = pctxt->state;
+ xmlAutomataNewCountedTrans(pctxt->am,
tmp, oldstate, counter);
- ctxt->state =
- xmlAutomataNewCounterTrans(ctxt->am, tmp, NULL,
+ pctxt->state =
+ xmlAutomataNewCounterTrans(pctxt->am, tmp, NULL,
counter);
if (particle->minOccurs == 0) {
- xmlAutomataNewEpsilon(ctxt->am,
- oldstate, ctxt->state);
+ xmlAutomataNewEpsilon(pctxt->am,
+ oldstate, pctxt->state);
}
} else {
sub = particle->children->children;
while (sub != NULL) {
- xmlSchemaBuildAContentModel(ctxt,
+ xmlSchemaBuildAContentModel(pctxt,
(xmlSchemaParticlePtr) sub, name);
sub = sub->next;
}
if (particle->minOccurs == 0) {
- xmlAutomataNewEpsilon(ctxt->am, oldstate,
- ctxt->state);
+ xmlAutomataNewEpsilon(pctxt->am, oldstate,
+ pctxt->state);
}
}
}
@@ -11243,8 +11733,8 @@ xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr ctxt,
xmlSchemaTreeItemPtr sub;
xmlAutomataStatePtr start, end;
- start = ctxt->state;
- end = xmlAutomataNewState(ctxt->am);
+ start = pctxt->state;
+ end = xmlAutomataNewState(pctxt->am);
/*
* iterate over the subtypes and remerge the end with an
@@ -11253,15 +11743,15 @@ xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr ctxt,
if (particle->maxOccurs == 1) {
sub = particle->children->children;
while (sub != NULL) {
- ctxt->state = start;
- xmlSchemaBuildAContentModel(ctxt,
+ pctxt->state = start;
+ xmlSchemaBuildAContentModel(pctxt,
(xmlSchemaParticlePtr) sub, name);
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, end);
+ xmlAutomataNewEpsilon(pctxt->am, pctxt->state, end);
sub = sub->next;
}
} else {
int counter;
- xmlAutomataStatePtr hop;
+ xmlAutomataStatePtr hop, base;
int maxOccurs = particle->maxOccurs == UNBOUNDED ?
UNBOUNDED : particle->maxOccurs - 1;
int minOccurs =
@@ -11272,27 +11762,26 @@ xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr ctxt,
* which went through the choice.
*/
counter =
- xmlAutomataNewCounter(ctxt->am, minOccurs,
- maxOccurs);
- hop = xmlAutomataNewState(ctxt->am);
+ xmlAutomataNewCounter(pctxt->am, minOccurs, maxOccurs);
+ hop = xmlAutomataNewState(pctxt->am);
+ base = xmlAutomataNewState(pctxt->am);
sub = particle->children->children;
while (sub != NULL) {
- ctxt->state = start;
- xmlSchemaBuildAContentModel(ctxt,
+ pctxt->state = base;
+ xmlSchemaBuildAContentModel(pctxt,
(xmlSchemaParticlePtr) sub, name);
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, hop);
+ xmlAutomataNewEpsilon(pctxt->am, pctxt->state, hop);
sub = sub->next;
}
- xmlAutomataNewCountedTrans(ctxt->am, hop, start,
- counter);
- xmlAutomataNewCounterTrans(ctxt->am, hop, end,
- counter);
+ xmlAutomataNewEpsilon(pctxt->am, start, base);
+ xmlAutomataNewCountedTrans(pctxt->am, hop, base, counter);
+ xmlAutomataNewCounterTrans(pctxt->am, hop, end, counter);
}
if (particle->minOccurs == 0) {
- xmlAutomataNewEpsilon(ctxt->am, start, end);
+ xmlAutomataNewEpsilon(pctxt->am, start, end);
}
- ctxt->state = end;
+ pctxt->state = end;
break;
}
case XML_SCHEMA_TYPE_ALL:{
@@ -11304,16 +11793,14 @@ xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr ctxt,
sub = (xmlSchemaParticlePtr) particle->children->children;
if (sub == NULL)
break;
- start = ctxt->state;
+ start = pctxt->state;
while (sub != NULL) {
- ctxt->state = start;
+ pctxt->state = start;
elemDecl = (xmlSchemaElementPtr) sub->children;
if (elemDecl == NULL) {
- xmlSchemaPErr(ctxt, NULL,
- XML_SCHEMAP_INTERNAL,
- "Internal error: xmlSchemaBuildAContentModel, "
- "<element> particle a NULL term.\n", NULL, NULL);
+ PERROR_INT("xmlSchemaBuildAContentModel",
+ "<element> particle has no term");
return;
};
/*
@@ -11322,37 +11809,59 @@ xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr ctxt,
* already ensured during the parse of the content of
* <all>.
*/
- if ((sub->minOccurs == 1) &&
- (sub->maxOccurs == 1)) {
- xmlAutomataNewOnceTrans2(ctxt->am, ctxt->state,
- ctxt->state,
- elemDecl->name,
- elemDecl->targetNamespace,
- 1, 1, elemDecl);
- } else if ((sub->minOccurs == 0) &&
- (sub->maxOccurs == 1)) {
-
- xmlAutomataNewCountTrans2(ctxt->am, ctxt->state,
- ctxt->state,
- elemDecl->name,
- elemDecl->targetNamespace,
- 0,
- 1,
- elemDecl);
- }
+ if (elemDecl->flags & XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD) {
+ int counter;
+
+ /*
+ * This is an abstract group, we need to share
+ * the same counter for all the element transitions
+ * derived from the group
+ */
+ counter = xmlAutomataNewCounter(pctxt->am,
+ sub->minOccurs, sub->maxOccurs);
+ xmlSchemaBuildContentModelForSubstGroup(pctxt,
+ sub, counter, pctxt->state);
+ } else {
+ if ((sub->minOccurs == 1) &&
+ (sub->maxOccurs == 1)) {
+ xmlAutomataNewOnceTrans2(pctxt->am, pctxt->state,
+ pctxt->state,
+ elemDecl->name,
+ elemDecl->targetNamespace,
+ 1, 1, elemDecl);
+ } else if ((sub->minOccurs == 0) &&
+ (sub->maxOccurs == 1)) {
+
+ xmlAutomataNewCountTrans2(pctxt->am, pctxt->state,
+ pctxt->state,
+ elemDecl->name,
+ elemDecl->targetNamespace,
+ 0,
+ 1,
+ elemDecl);
+ }
+ }
sub = (xmlSchemaParticlePtr) sub->next;
}
lax = particle->minOccurs == 0;
- ctxt->state =
- xmlAutomataNewAllTrans(ctxt->am, ctxt->state, NULL, lax);
+ pctxt->state =
+ xmlAutomataNewAllTrans(pctxt->am, pctxt->state, NULL, lax);
break;
}
+ case XML_SCHEMA_TYPE_GROUP:
+ /*
+ * If we hit a model group definition, then this means that
+ * it was empty, thus was not substituted for the containing
+ * model group. Just do nothing in this case.
+ */
+ break;
default:
- xmlGenericError(xmlGenericErrorContext,
- "Internal error: xmlSchemaBuildAContentModel, found "
- "unexpected term of type %d in content model of complex "
- "type '%s'.\n",
- particle->children->type, name);
+ xmlSchemaPInternalErr(pctxt, "xmlSchemaBuildAContentModel",
+ "found unexpected term of type '%s' in content model of complex "
+ "type '%s'",
+ xmlSchemaCompTypeToString(particle->children->type), name);
+ xmlGenericError(xmlGenericErrorContext,
+ "Unexpected type: %d\n", particle->children->type);
return;
}
}
@@ -12748,7 +13257,7 @@ xmlSchemaBuildAttributeValidation(xmlSchemaParserCtxtPtr pctxt,
* declaration}'s {value constraint} .
*/
xmlSchemaGetEffectiveValueConstraint(base->attr,
- &effFixed, &bEffValue, 0);
+ &effFixed, &bEffValue, NULL);
/*
* 2.1.3 ... one of the following must be true
*
@@ -12760,7 +13269,7 @@ xmlSchemaBuildAttributeValidation(xmlSchemaParserCtxtPtr pctxt,
const xmlChar *rEffValue = NULL;
xmlSchemaGetEffectiveValueConstraint(base->attr,
- &effFixed, &rEffValue, 0);
+ &effFixed, &rEffValue, NULL);
/*
* 2.1.3.2 R's ·effective value constraint· is
* fixed with the same string as B's.
@@ -13258,8 +13767,14 @@ xmlSchemaCheckTypeDefCircular(xmlSchemaTypePtr item,
((item->type != XML_SCHEMA_TYPE_COMPLEX) &&
(item->type != XML_SCHEMA_TYPE_SIMPLE)))
return;
- xmlSchemaCheckTypeDefCircularInternal(ctxt, item, item->baseType);
-
+ if (item->redef != NULL) {
+ xmlSchemaTypePtr cur = item;
+ do {
+ xmlSchemaCheckTypeDefCircularInternal(ctxt, cur, cur->baseType);
+ cur = cur->redef;
+ } while (cur != NULL);
+ } else
+ xmlSchemaCheckTypeDefCircularInternal(ctxt, item, item->baseType);
}
/**
@@ -14298,7 +14813,7 @@ xmlSchemaCheckCOSCTExtends(xmlSchemaParserCtxtPtr ctxt,
* SPEC (1) "If the {base type definition} is a complex type definition,
* then all of the following must be true:"
*/
- if (base->type == XML_SCHEMA_TYPE_COMPLEX) {
+ if (IS_COMPLEX_TYPE(base)) {
/*
* SPEC (1.1) "The {final} of the {base type definition} must not
* contain extension."
@@ -15619,7 +16134,7 @@ xmlSchemaDeriveAndValidateFacets(xmlSchemaParserCtxtPtr pctxt,
res = xmlSchemaCompareValues(fmininc->val, bfmaxinc->val);
if (res == -2)
goto internal_error;
- if (res == -1) {
+ if (res == 1) {
xmlSchemaDeriveFacetErr(pctxt, fmininc, bfmaxinc, -1, 1, 1);
}
}
@@ -16036,7 +16551,7 @@ xmlSchemaTypeFixup(xmlSchemaTypePtr type,
snprintf(buf, 29, "#scST%d", ++(pctxt->counter));
tmpname = xmlDictLookup(pctxt->dict, BAD_CAST buf, -1);
content = xmlSchemaAddType(pctxt,
- pctxt->schema, tmpname, tmpname, type->node);
+ pctxt->schema, tmpname, tmpname, type->node, 0);
if (content == NULL)
return;
/*
@@ -18355,8 +18870,6 @@ xmlSchemaAssembleByXSI(xmlSchemaValidCtxtPtr vctxt)
return (ret);
}
-#define VAL_CREATE_DICT if (vctxt->dict == NULL) vctxt->dict = xmlDictCreate();
-
static const xmlChar *
xmlSchemaLookupNamespace(xmlSchemaValidCtxtPtr vctxt,
const xmlChar *prefix)
@@ -18392,7 +18905,6 @@ xmlSchemaLookupNamespace(xmlSchemaValidCtxtPtr vctxt,
if (nsName != NULL) {
const xmlChar *ret;
- VAL_CREATE_DICT;
ret = xmlDictLookup(vctxt->dict, nsName, -1);
xmlFree(nsName);
return (ret);
@@ -18488,6 +19000,34 @@ xmlSchemaValidateNotation(xmlSchemaValidCtxtPtr vctxt,
return (ret);
}
+static int
+xmlSchemaVAddNodeQName(xmlSchemaValidCtxtPtr vctxt,
+ const xmlChar* lname,
+ const xmlChar* nsname)
+{
+ int i;
+
+ lname = xmlDictLookup(vctxt->dict, lname, -1);
+ if (lname == NULL)
+ return(-1);
+ if (nsname != NULL) {
+ nsname = xmlDictLookup(vctxt->dict, nsname, -1);
+ if (nsname == NULL)
+ return(-1);
+ }
+ for (i = 0; i < vctxt->nodeQNames->nbItems; i += 2) {
+ if ((vctxt->nodeQNames->items [i] == lname) &&
+ (vctxt->nodeQNames->items[i +1] == nsname))
+ /* Already there */
+ return(i);
+ }
+ /* Add new entry. */
+ i = vctxt->nodeQNames->nbItems;
+ xmlSchemaItemListAdd(vctxt->nodeQNames, (void *) lname);
+ xmlSchemaItemListAdd(vctxt->nodeQNames, (void *) nsname);
+ return(i);
+}
+
/************************************************************************
* *
* Validation of identity-constraints (IDC) *
@@ -19056,6 +19596,32 @@ xmlSchemaFormatIDCKeySequence(xmlSchemaValidCtxtPtr vctxt,
}
/**
+ * xmlSchemaXPathPop:
+ * @vctxt: the WXS validation context
+ *
+ * Pops all XPath states.
+ *
+ * Returns 0 on success and -1 on internal errors.
+ */
+static int
+xmlSchemaXPathPop(xmlSchemaValidCtxtPtr vctxt)
+{
+ xmlSchemaIDCStateObjPtr sto;
+ int res;
+
+ if (vctxt->xpathStates == NULL)
+ return(0);
+ sto = vctxt->xpathStates;
+ do {
+ res = xmlStreamPop((xmlStreamCtxtPtr) sto->xpathCtxt);
+ if (res == -1)
+ return (-1);
+ sto = sto->next;
+ } while (sto != NULL);
+ return(0);
+}
+
+/**
* xmlSchemaXPathProcessHistory:
* @vctxt: the WXS validation context
* @type: the simple/complex type of the current node if any at all
@@ -19399,7 +19965,7 @@ create_key:
*keySeq = NULL;
return(-1);
}
- memset(ntItem, 0, sizeof(xmlSchemaPSVIIDCNode));
+ memset(ntItem, 0, sizeof(xmlSchemaPSVIIDCNode));
/*
* Store the node-table item on global list.
@@ -19411,11 +19977,27 @@ create_key:
*keySeq = NULL;
return (-1);
}
+ ntItem->nodeQNameID = -1;
+ } else {
+ /*
+ * Save a cached QName for this node on the IDC node, to be
+ * able to report it, even if the node is not saved.
+ */
+ ntItem->nodeQNameID = xmlSchemaVAddNodeQName(vctxt,
+ vctxt->inode->localName, vctxt->inode->nsName);
+ if (ntItem->nodeQNameID == -1) {
+ xmlFree(ntItem);
+ xmlFree(*keySeq);
+ *keySeq = NULL;
+ return (-1);
+ }
}
/*
- * Init the node-table item. Consume the key-sequence.
+ * Init the node-table item: Save the node, position and
+ * consume the key-sequence.
*/
ntItem->node = vctxt->node;
+ ntItem->nodeLine = vctxt->inode->nodeLine;
ntItem->keys = *keySeq;
*keySeq = NULL;
if (xmlSchemaIDCAppendNodeTableItem(bind, ntItem) == -1) {
@@ -19886,6 +20468,7 @@ xmlSchemaCheckCVCIDCKeyRef(xmlSchemaValidCtxtPtr vctxt)
int i, j, k, res;
xmlSchemaPSVIIDCKeyPtr *refKeys, *keys;
xmlSchemaPSVIIDCKeyPtr refKey, key;
+ xmlSchemaPSVIIDCNodePtr refNode = NULL;
/*
* Find the referred key/unique.
@@ -19903,8 +20486,9 @@ xmlSchemaCheckCVCIDCKeyRef(xmlSchemaValidCtxtPtr vctxt)
*/
for (i = 0; i < refbind->nbNodes; i++) {
res = 0;
- if (bind != NULL) {
- refKeys = refbind->nodeTable[i]->keys;
+ refNode = refbind->nodeTable[i];
+ if (bind != NULL) {
+ refKeys = refNode->keys;
for (j = 0; j < bind->nbNodes; j++) {
keys = bind->nodeTable[j]->keys;
for (k = 0; k < bind->definition->nbFields; k++) {
@@ -19928,9 +20512,8 @@ xmlSchemaCheckCVCIDCKeyRef(xmlSchemaValidCtxtPtr vctxt)
}
if (res == 0) {
xmlChar *str = NULL, *strB = NULL;
- /* TODO: Report the key-sequence. */
- xmlSchemaCustomErr((xmlSchemaAbstractCtxtPtr) vctxt,
- XML_SCHEMAV_CVC_IDC, NULL,
+ xmlSchemaKeyrefErr(vctxt,
+ XML_SCHEMAV_CVC_IDC, refNode,
(xmlSchemaTypePtr) refbind->definition,
"No match found for key-sequence %s of key "
"reference '%s'",
@@ -20011,8 +20594,9 @@ xmlSchemaGetFreshAttrInfo(xmlSchemaValidCtxtPtr vctxt)
static int
xmlSchemaValidatorPushAttribute(xmlSchemaValidCtxtPtr vctxt,
xmlNodePtr attrNode,
+ int nodeLine,
const xmlChar *localName,
- const xmlChar *nsName,
+ const xmlChar *nsName,
int ownedNames,
xmlChar *value,
int ownedValue)
@@ -20026,6 +20610,7 @@ xmlSchemaValidatorPushAttribute(xmlSchemaValidCtxtPtr vctxt,
return (-1);
}
attr->node = attrNode;
+ attr->nodeLine = nodeLine;
attr->state = XML_SCHEMAS_ATTR_UNKNOWN;
attr->localName = localName;
attr->nsName = nsName;
@@ -20859,7 +21444,6 @@ xmlSchemaVExpandQName(xmlSchemaValidCtxtPtr vctxt,
* string.
*/
local = xmlSplitQName2(value, &prefix);
- VAL_CREATE_DICT;
if (local == NULL)
*localName = xmlDictLookup(vctxt->dict, value, -1);
else {
@@ -21715,7 +22299,8 @@ eval_idcs:
"calling xmlSchemaXPathEvaluate()");
goto internal_error;
}
- }
+ } else if (vctxt->xpathStates != NULL)
+ xmlSchemaXPathPop(vctxt);
}
/*
@@ -21802,41 +22387,6 @@ xmlSchemaValidateElemWildcard(xmlSchemaValidCtxtPtr vctxt,
return (-1);
}
*skip = 0;
- if (wild->negNsSet != NULL) {
- /*
- * URGENT VAL TODO: Fix the content model to reject
- * "##other" wildcards.
- */
- if (xmlSchemaCheckCVCWildcardNamespace(wild,
- vctxt->inode->nsName) != 0) {
- if ((wild->minOccurs == 1) && (wild->maxOccurs == 1)) {
- xmlSchemaNodeInfoPtr pinode = vctxt->elemInfos[vctxt->depth -1];
- /*
- * VAL TODO: Workaround possible *only* if minOccurs and
- * maxOccurs are 1.
- */
- xmlSchemaComplexTypeErr((xmlSchemaAbstractCtxtPtr) vctxt,
- /* VAL TODO: error code? */
- XML_SCHEMAV_ELEMENT_CONTENT, NULL,
- (xmlSchemaTypePtr) wild,
- "This element is not accepted by the wildcard",
- 0, 0, NULL);
- vctxt->skipDepth = vctxt->depth;
- if ((pinode->flags &
- XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT) == 0)
- pinode->flags |= XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT;
- vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_NOT_EXPECTED;
- return (XML_SCHEMAV_ELEMENT_CONTENT);
- }
- if (wild->processContents == XML_SCHEMAS_ANY_SKIP) {
- *skip = 1;
- return (0);
- }
- vctxt->inode->typeDef =
- xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE);
- return (0);
- }
- }
if (wild->processContents == XML_SCHEMAS_ANY_SKIP) {
/*
* URGENT VAL TODO: Either we need to position the stream to the
@@ -23179,7 +23729,6 @@ internal_error:
* *
************************************************************************/
-#ifdef XML_SCHEMA_SAX_ENABLED
/*
* Process text content.
*/
@@ -23278,6 +23827,10 @@ xmlSchemaSAXHandleStartElementNs(void *ctx,
goto internal_error;
}
ielem = vctxt->inode;
+ /*
+ * TODO: Is this OK?
+ */
+ ielem->nodeLine = xmlSAX2GetLineNumber(vctxt->parserCtxt);
ielem->localName = localname;
ielem->nsName = URI;
ielem->flags |= XML_SCHEMA_ELEM_INFO_EMPTY;
@@ -23345,8 +23898,11 @@ xmlSchemaSAXHandleStartElementNs(void *ctx,
*/
value = xmlStrndup(attributes[j+3],
attributes[j+4] - attributes[j+3]);
+ /*
+ * TODO: Set the node line.
+ */
ret = xmlSchemaValidatorPushAttribute(vctxt,
- NULL, attributes[j], attributes[j+2], 0,
+ NULL, ielem->nodeLine, attributes[j], attributes[j+2], 0,
value, 1);
if (ret == -1) {
VERROR_INT("xmlSchemaSAXHandleStartElementNs",
@@ -23419,7 +23975,6 @@ internal_error:
xmlStopParser(vctxt->parserCtxt);
return;
}
-#endif
/************************************************************************
* *
@@ -23447,6 +24002,8 @@ xmlSchemaNewValidCtxt(xmlSchemaPtr schema)
}
memset(ret, 0, sizeof(xmlSchemaValidCtxt));
ret->type = XML_SCHEMA_CTXT_VALIDATOR;
+ ret->dict = xmlDictCreate();
+ ret->nodeQNames = xmlSchemaItemListCreate();
ret->schema = schema;
return (ret);
}
@@ -23524,7 +24081,11 @@ xmlSchemaClearValidCtxt(xmlSchemaValidCtxtPtr vctxt)
break;
xmlSchemaClearElemInfo(ei);
}
- }
+ }
+ xmlSchemaItemListClear(vctxt->nodeQNames);
+ /* Recreate the dict. */
+ xmlDictFree(vctxt->dict);
+ vctxt->dict = xmlDictCreate();
}
/**
@@ -23602,6 +24163,8 @@ xmlSchemaFreeValidCtxt(xmlSchemaValidCtxtPtr ctxt)
}
xmlFree(ctxt->elemInfos);
}
+ if (ctxt->nodeQNames != NULL)
+ xmlSchemaItemListFree(ctxt->nodeQNames);
if (ctxt->dict != NULL)
xmlDictFree(ctxt->dict);
xmlFree(ctxt);
@@ -23648,6 +24211,26 @@ xmlSchemaSetValidErrors(xmlSchemaValidCtxtPtr ctxt,
}
/**
+ * xmlSchemaSetValidStructuredErrors:
+ * @ctxt: a schema validation context
+ * @serror: the structured error function
+ * @ctx: the functions context
+ *
+ * Set the structured error callback
+ */
+void
+xmlSchemaSetValidStructuredErrors(xmlSchemaValidCtxtPtr ctxt,
+ xmlStructuredErrorFunc serror, void *ctx)
+{
+ if (ctxt == NULL)
+ return;
+ ctxt->serror = serror;
+ ctxt->error = NULL;
+ ctxt->warning = NULL;
+ ctxt->userData = ctx;
+}
+
+/**
* xmlSchemaGetValidErrors:
* @ctxt: a XML-Schema validation context
* @err: the error function result
@@ -23758,6 +24341,7 @@ xmlSchemaVDocWalk(xmlSchemaValidCtxtPtr vctxt)
goto internal_error;
ielem = vctxt->inode;
ielem->node = node;
+ ielem->nodeLine = node->line;
ielem->localName = node->name;
if (node->ns != NULL)
ielem->nsName = node->ns->href;
@@ -23777,6 +24361,11 @@ xmlSchemaVDocWalk(xmlSchemaValidCtxtPtr vctxt)
nsName = NULL;
ret = xmlSchemaValidatorPushAttribute(vctxt,
(xmlNodePtr) attr,
+ /*
+ * Note that we give it the line number of the
+ * parent element.
+ */
+ ielem->nodeLine,
attr->name, nsName, 0,
xmlNodeListGetString(attr->doc, attr->children, 1), 1);
if (ret == -1) {
@@ -24246,24 +24835,24 @@ commentSplit(void *ctx, const xmlChar *value)
* Varargs error callbacks to the user application, harder ...
*/
-static void
-warningSplit(void *ctx, const char *msg, ...) {
+static void XMLCDECL
+warningSplit(void *ctx, const char *msg ATTRIBUTE_UNUSED, ...) {
xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
(ctxt->user_sax->warning != NULL)) {
TODO
}
}
-static void
-errorSplit(void *ctx, const char *msg, ...) {
+static void XMLCDECL
+errorSplit(void *ctx, const char *msg ATTRIBUTE_UNUSED, ...) {
xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
(ctxt->user_sax->error != NULL)) {
TODO
}
}
-static void
-fatalErrorSplit(void *ctx, const char *msg, ...) {
+static void XMLCDECL
+fatalErrorSplit(void *ctx, const char *msg ATTRIBUTE_UNUSED, ...) {
xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
(ctxt->user_sax->fatalError != NULL)) {
@@ -24643,7 +25232,6 @@ xmlSchemaValidateFile(xmlSchemaValidCtxtPtr ctxt,
const char * filename,
int options ATTRIBUTE_UNUSED)
{
-#ifdef XML_SCHEMA_SAX_ENABLED
int ret;
xmlParserInputBufferPtr input;
@@ -24657,9 +25245,6 @@ xmlSchemaValidateFile(xmlSchemaValidCtxtPtr ctxt,
ret = xmlSchemaValidateStream(ctxt, input, XML_CHAR_ENCODING_NONE,
NULL, NULL);
return (ret);
-#else
- return (-1);
-#endif /* XML_SCHEMA_SAX_ENABLED */
}
#define bottom_xmlschemas
diff --git a/xmlschemastypes.c b/xmlschemastypes.c
index 27f7b53..9d99bbb 100644
--- a/xmlschemastypes.c
+++ b/xmlschemastypes.c
@@ -319,6 +319,63 @@ xmlSchemaInitBasicType(const char *name, xmlSchemaValType type,
}
/*
+* WARNING: Those type reside normally in xmlschemas.c but are
+* redefined here locally in oder of being able to use them for xs:anyType-
+* TODO: Remove those definition if we move the types to a header file.
+* TODO: Always keep those structs up-to-date with the originals.
+*/
+#define UNBOUNDED (1 << 30)
+
+typedef struct _xmlSchemaTreeItem xmlSchemaTreeItem;
+typedef xmlSchemaTreeItem *xmlSchemaTreeItemPtr;
+struct _xmlSchemaTreeItem {
+ xmlSchemaTypeType type;
+ xmlSchemaAnnotPtr annot;
+ xmlSchemaTreeItemPtr next;
+ xmlSchemaTreeItemPtr children;
+};
+
+typedef struct _xmlSchemaParticle xmlSchemaParticle;
+typedef xmlSchemaParticle *xmlSchemaParticlePtr;
+struct _xmlSchemaParticle {
+ xmlSchemaTypeType type;
+ xmlSchemaAnnotPtr annot;
+ xmlSchemaTreeItemPtr next;
+ xmlSchemaTreeItemPtr children;
+ int minOccurs;
+ int maxOccurs;
+ xmlNodePtr node;
+};
+
+typedef struct _xmlSchemaModelGroup xmlSchemaModelGroup;
+typedef xmlSchemaModelGroup *xmlSchemaModelGroupPtr;
+struct _xmlSchemaModelGroup {
+ xmlSchemaTypeType type;
+ xmlSchemaAnnotPtr annot;
+ xmlSchemaTreeItemPtr next;
+ xmlSchemaTreeItemPtr children;
+ xmlNodePtr node;
+};
+
+static xmlSchemaParticlePtr
+xmlSchemaAddParticle(void)
+{
+ xmlSchemaParticlePtr ret = NULL;
+
+ ret = (xmlSchemaParticlePtr)
+ xmlMalloc(sizeof(xmlSchemaParticle));
+ if (ret == NULL) {
+ xmlSchemaTypeErrMemory(NULL, "allocating particle component");
+ return (NULL);
+ }
+ memset(ret, 0, sizeof(xmlSchemaParticle));
+ ret->type = XML_SCHEMA_TYPE_PARTICLE;
+ ret->minOccurs = 1;
+ ret->maxOccurs = 1;
+ return (ret);
+}
+
+/*
* xmlSchemaInitTypes:
*
* Initialize the default XML Schemas type library
@@ -339,12 +396,56 @@ xmlSchemaInitTypes(void)
NULL);
xmlSchemaTypeAnyTypeDef->baseType = xmlSchemaTypeAnyTypeDef;
xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED;
+ /*
+ * Init the content type.
+ */
+ xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED;
{
+ xmlSchemaParticlePtr particle;
+ xmlSchemaModelGroupPtr sequence;
xmlSchemaWildcardPtr wild;
-
+ /* First particle. */
+ particle = xmlSchemaAddParticle();
+ if (particle == NULL)
+ return;
+ xmlSchemaTypeAnyTypeDef->subtypes = (xmlSchemaTypePtr) particle;
+ /* Sequence model group. */
+ sequence = (xmlSchemaModelGroupPtr)
+ xmlMalloc(sizeof(xmlSchemaModelGroup));
+ if (sequence == NULL) {
+ xmlSchemaTypeErrMemory(NULL, "allocating model group component");
+ return;
+ }
+ memset(sequence, 0, sizeof(xmlSchemaModelGroup));
+ sequence->type = XML_SCHEMA_TYPE_SEQUENCE;
+ particle->children = (xmlSchemaTreeItemPtr) sequence;
+ /* Second particle. */
+ particle = xmlSchemaAddParticle();
+ if (particle == NULL)
+ return;
+ particle->minOccurs = 0;
+ particle->maxOccurs = UNBOUNDED;
+ sequence->children = (xmlSchemaTreeItemPtr) particle;
+ /* The wildcard */
+ wild = (xmlSchemaWildcardPtr) xmlMalloc(sizeof(xmlSchemaWildcard));
+ if (wild == NULL) {
+ xmlSchemaTypeErrMemory(NULL, "allocating wildcard component");
+ return;
+ }
+ memset(wild, 0, sizeof(xmlSchemaWildcard));
+ wild->type = XML_SCHEMA_TYPE_ANY;
+ wild->any = 1;
+ wild->minOccurs = 1;
+ wild->maxOccurs = 1;
+ wild->processContents = XML_SCHEMAS_ANY_LAX;
+ particle->children = (xmlSchemaTreeItemPtr) wild;
+ /*
+ * Create the attribute wildcard.
+ */
wild = (xmlSchemaWildcardPtr) xmlMalloc(sizeof(xmlSchemaWildcard));
if (wild == NULL) {
- xmlSchemaTypeErrMemory(NULL, "could not create an attribute wildcard on anyType");
+ xmlSchemaTypeErrMemory(NULL, "could not create an attribute "
+ "wildcard on anyType");
return;
}
memset(wild, 0, sizeof(xmlSchemaWildcard));
@@ -519,7 +620,24 @@ void
xmlSchemaCleanupTypes(void) {
if (xmlSchemaTypesInitialized == 0)
return;
- xmlSchemaFreeWildcard(xmlSchemaTypeAnyTypeDef->attributeWildcard);
+ /*
+ * Free xs:anyType.
+ */
+ {
+ xmlSchemaParticlePtr particle;
+ /* Attribute wildcard. */
+ xmlSchemaFreeWildcard(xmlSchemaTypeAnyTypeDef->attributeWildcard);
+ /* Content type. */
+ particle = (xmlSchemaParticlePtr) xmlSchemaTypeAnyTypeDef->subtypes;
+ /* Wildcard. */
+ xmlSchemaFreeWildcard((xmlSchemaWildcardPtr)
+ particle->children->children->children);
+ xmlFree((xmlSchemaParticlePtr) particle->children->children);
+ /* Sequence model group. */
+ xmlFree((xmlSchemaModelGroupPtr) particle->children);
+ xmlFree((xmlSchemaParticlePtr) particle);
+ xmlSchemaTypeAnyTypeDef->subtypes = NULL;
+ }
xmlHashFree(xmlSchemaTypesBank, (xmlHashDeallocator) xmlSchemaFreeType);
xmlSchemaTypesInitialized = 0;
}
@@ -2133,7 +2251,7 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
unsigned int len, neg = 0;
xmlChar cval[25];
xmlChar *cptr = cval;
- int dec = -1;
+ unsigned int dec = ~0u;
if (cur == NULL)
goto return1;
@@ -2166,7 +2284,9 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
*cptr++ = *cur++;
len++;
} else if (*cur == '.') {
- if (dec != -1)
+ if (len == 0)
+ len++;
+ if (dec != ~0u)
goto return1; /* multiple decimal points */
cur++;
if ((*cur == 0) && (cur -1 == value))
@@ -2193,8 +2313,8 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
/*
* If a mixed decimal, get rid of trailing zeroes
*/
- if (dec != -1) {
- while ((len > dec) && (cptr > cval) &&
+ if (dec != ~0u) {
+ while ((len > dec) && (cptr > cval) &&
(*(cptr-1) == '0')) {
cptr--;
len--;
@@ -2216,7 +2336,7 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
if (len == 0)
len++;
v->value.decimal.sign = neg;
- if (dec == -1) {
+ if (dec == ~0u) {
v->value.decimal.frac = 0;
v->value.decimal.total = len;
} else {
@@ -4685,6 +4805,8 @@ xmlSchemaCompareValuesInternal(xmlSchemaValType xtype,
return(1);
else if (ret == 0)
return(0);
+ else
+ return(-1);
}
else if (x->value.base64.total > y->value.base64.total)
return(1);
diff --git a/xmlstring.c b/xmlstring.c
index d73c49c..67a20b9 100644
--- a/xmlstring.c
+++ b/xmlstring.c
@@ -533,7 +533,7 @@ xmlStrcat(xmlChar *cur, const xmlChar *add) {
*
* Returns the number of characters written to @buf or -1 if an error occurs.
*/
-int
+int XMLCDECL
xmlStrPrintf(xmlChar *buf, int len, const xmlChar *msg, ...) {
va_list args;
int ret;
diff --git a/xmlunicode.c b/xmlunicode.c
index af91f47..454963f 100644
--- a/xmlunicode.c
+++ b/xmlunicode.c
@@ -926,8 +926,8 @@ static xmlChSRange xmlZS[] = {{0x20, 0x20}, {0xa0, 0xa0}, {0x1680, 0x1680},
{0x205f, 0x205f}, {0x3000, 0x3000} };
static xmlChRangeGroup xmlZG = {9,0,xmlZS,NULL};
-xmlUnicodeNameTable xmlUnicodeBlockTbl = {xmlUnicodeBlocks, 128};
-xmlUnicodeNameTable xmlUnicodeCatTbl = {xmlUnicodeCats, 36};
+static xmlUnicodeNameTable xmlUnicodeBlockTbl = {xmlUnicodeBlocks, 128};
+static xmlUnicodeNameTable xmlUnicodeCatTbl = {xmlUnicodeCats, 36};
/**
* xmlUnicodeLookup:
diff --git a/xmlwriter.c b/xmlwriter.c
index 5e537ea..6227398 100644
--- a/xmlwriter.c
+++ b/xmlwriter.c
@@ -739,7 +739,7 @@ xmlTextWriterStartComment(xmlTextWriterPtr writer)
return -1;
}
- p->name = 0;
+ p->name = NULL;
p->state = XML_TEXTWRITER_COMMENT;
xmlListPushFront(writer->nodes, p);
@@ -825,7 +825,7 @@ xmlTextWriterEndComment(xmlTextWriterPtr writer)
*
* Returns the bytes written (may be 0 because of buffering) or -1 in case of error
*/
-int
+int XMLCDECL
xmlTextWriterWriteFormatComment(xmlTextWriterPtr writer,
const char *format, ...)
{
@@ -1018,7 +1018,7 @@ xmlTextWriterStartElementNS(xmlTextWriterPtr writer,
if ((writer == NULL) || (name == NULL) || (*name == '\0'))
return -1;
- buf = 0;
+ buf = NULL;
if (prefix != 0) {
buf = xmlStrdup(prefix);
buf = xmlStrcat(buf, BAD_CAST ":");
@@ -1200,7 +1200,7 @@ xmlTextWriterFullEndElement(xmlTextWriterPtr writer)
*
* Returns the bytes written (may be 0 because of buffering) or -1 in case of error
*/
-int
+int XMLCDECL
xmlTextWriterWriteFormatRaw(xmlTextWriterPtr writer, const char *format,
...)
{
@@ -1326,7 +1326,7 @@ xmlTextWriterWriteRaw(xmlTextWriterPtr writer, const xmlChar * content)
*
* Returns the bytes written (may be 0 because of buffering) or -1 in case of error
*/
-int
+int XMLCDECL
xmlTextWriterWriteFormatString(xmlTextWriterPtr writer, const char *format,
...)
{
@@ -1745,7 +1745,7 @@ xmlTextWriterStartAttributeNS(xmlTextWriterPtr writer,
if ((writer == NULL) || (name == NULL) || (*name == '\0'))
return -1;
- buf = 0;
+ buf = NULL;
if (prefix != 0) {
buf = xmlStrdup(prefix);
buf = xmlStrcat(buf, BAD_CAST ":");
@@ -1887,7 +1887,7 @@ xmlTextWriterEndAttribute(xmlTextWriterPtr writer)
*
* Returns the bytes written (may be 0 because of buffering) or -1 in case of error
*/
-int
+int XMLCDECL
xmlTextWriterWriteFormatAttribute(xmlTextWriterPtr writer,
const xmlChar * name, const char *format,
...)
@@ -1982,7 +1982,7 @@ xmlTextWriterWriteAttribute(xmlTextWriterPtr writer, const xmlChar * name,
*
* Returns the bytes written (may be 0 because of buffering) or -1 in case of error
*/
-int
+int XMLCDECL
xmlTextWriterWriteFormatAttributeNS(xmlTextWriterPtr writer,
const xmlChar * prefix,
const xmlChar * name,
@@ -2063,7 +2063,7 @@ xmlTextWriterWriteAttributeNS(xmlTextWriterPtr writer,
if ((writer == NULL) || (name == NULL) || (*name == '\0'))
return -1;
- buf = 0;
+ buf = NULL;
if (prefix != NULL) {
buf = xmlStrdup(prefix);
buf = xmlStrcat(buf, BAD_CAST ":");
@@ -2078,7 +2078,7 @@ xmlTextWriterWriteAttributeNS(xmlTextWriterPtr writer,
sum += count;
if (namespaceURI != NULL) {
- buf = 0;
+ buf = NULL;
buf = xmlStrdup(BAD_CAST "xmlns");
if (prefix != NULL) {
buf = xmlStrcat(buf, BAD_CAST ":");
@@ -2104,7 +2104,7 @@ xmlTextWriterWriteAttributeNS(xmlTextWriterPtr writer,
*
* Returns the bytes written (may be 0 because of buffering) or -1 in case of error
*/
-int
+int XMLCDECL
xmlTextWriterWriteFormatElement(xmlTextWriterPtr writer,
const xmlChar * name, const char *format,
...)
@@ -2199,7 +2199,7 @@ xmlTextWriterWriteElement(xmlTextWriterPtr writer, const xmlChar * name,
*
* Returns the bytes written (may be 0 because of buffering) or -1 in case of error
*/
-int
+int XMLCDECL
xmlTextWriterWriteFormatElementNS(xmlTextWriterPtr writer,
const xmlChar * prefix,
const xmlChar * name,
@@ -2444,7 +2444,7 @@ xmlTextWriterEndPI(xmlTextWriterPtr writer)
*
* Returns the bytes written (may be 0 because of buffering) or -1 in case of error
*/
-int
+int XMLCDECL
xmlTextWriterWriteFormatPI(xmlTextWriterPtr writer, const xmlChar * target,
const char *format, ...)
{
@@ -2587,7 +2587,7 @@ xmlTextWriterStartCDATA(xmlTextWriterPtr writer)
return -1;
}
- p->name = 0;
+ p->name = NULL;
p->state = XML_TEXTWRITER_CDATA;
xmlListPushFront(writer->nodes, p);
@@ -2653,7 +2653,7 @@ xmlTextWriterEndCDATA(xmlTextWriterPtr writer)
*
* Returns the bytes written (may be 0 because of buffering) or -1 in case of error
*/
-int
+int XMLCDECL
xmlTextWriterWriteFormatCDATA(xmlTextWriterPtr writer, const char *format,
...)
{
@@ -2959,7 +2959,7 @@ xmlTextWriterEndDTD(xmlTextWriterPtr writer)
*
* Returns the bytes written (may be 0 because of buffering) or -1 in case of error
*/
-int
+int XMLCDECL
xmlTextWriterWriteFormatDTD(xmlTextWriterPtr writer,
const xmlChar * name,
const xmlChar * pubid,
@@ -3203,7 +3203,7 @@ xmlTextWriterEndDTDElement(xmlTextWriterPtr writer)
*
* Returns the bytes written (may be 0 because of buffering) or -1 in case of error
*/
-int
+int XMLCDECL
xmlTextWriterWriteFormatDTDElement(xmlTextWriterPtr writer,
const xmlChar * name,
const char *format, ...)
@@ -3440,7 +3440,7 @@ xmlTextWriterEndDTDAttlist(xmlTextWriterPtr writer)
*
* Returns the bytes written (may be 0 because of buffering) or -1 in case of error
*/
-int
+int XMLCDECL
xmlTextWriterWriteFormatDTDAttlist(xmlTextWriterPtr writer,
const xmlChar * name,
const char *format, ...)
@@ -3697,7 +3697,7 @@ xmlTextWriterEndDTDEntity(xmlTextWriterPtr writer)
*
* Returns the bytes written (may be 0 because of buffering) or -1 in case of error
*/
-int
+int XMLCDECL
xmlTextWriterWriteFormatDTDInternalEntity(xmlTextWriterPtr writer,
int pe,
const xmlChar * name,
diff --git a/xpath.c b/xpath.c
index cd4f82f..f57ba8c 100644
--- a/xpath.c
+++ b/xpath.c
@@ -89,7 +89,7 @@
double xmlXPathNAN = 0;
double xmlXPathPINF = 1;
double xmlXPathNINF = -1;
-double xmlXPathNZERO = 0;
+static double xmlXPathNZERO = 0; /* not exported from headers */
static int xmlXPathInitialized = 0;
/**
@@ -189,6 +189,15 @@ static int xmlXPathDisableOptimizer = 0;
* *
************************************************************************/
+/**
+ * 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
*/
@@ -1116,20 +1125,20 @@ xmlXPathDebugDumpCompExpr(FILE *output, xmlXPathCompExprPtr comp,
*
* Returns the XPath object just removed
*/
-extern xmlXPathObjectPtr
+xmlXPathObjectPtr
valuePop(xmlXPathParserContextPtr ctxt)
{
xmlXPathObjectPtr ret;
if ((ctxt == NULL) || (ctxt->valueNr <= 0))
- return (0);
+ return (NULL);
ctxt->valueNr--;
if (ctxt->valueNr > 0)
ctxt->value = ctxt->valueTab[ctxt->valueNr - 1];
else
ctxt->value = NULL;
ret = ctxt->valueTab[ctxt->valueNr];
- ctxt->valueTab[ctxt->valueNr] = 0;
+ ctxt->valueTab[ctxt->valueNr] = NULL;
return (ret);
}
/**
@@ -1141,7 +1150,7 @@ valuePop(xmlXPathParserContextPtr ctxt)
*
* returns the number of items on the value stack
*/
-extern int
+int
valuePush(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr value)
{
if ((ctxt == NULL) || (value == NULL)) return(-1);
@@ -1391,25 +1400,16 @@ xmlXPathFormatNumber(double number, char buffer[], int buffersize)
} else if (number == ((int) number)) {
char work[30];
char *ptr, *cur;
- int res, value = (int) number;
+ int value = (int) number;
ptr = &buffer[0];
- if (value < 0) {
- *ptr++ = '-';
- value = -value;
- }
if (value == 0) {
*ptr++ = '0';
} else {
+ snprintf(work, 29, "%d", value);
cur = &work[0];
- while (value != 0) {
- res = value % 10;
- value = value / 10;
- *cur++ = '0' + res;
- }
- cur--;
- while ((cur >= &work[0]) && (ptr - buffer < buffersize)) {
- *ptr++ = *cur--;
+ while ((*cur) && (ptr - buffer < buffersize)) {
+ *ptr++ = *cur++;
}
}
if (ptr - buffer < buffersize) {
@@ -4577,6 +4577,9 @@ xmlXPathEqualNodeSetFloat(xmlXPathParserContextPtr ctxt,
ret = 1;
break;
}
+ } else { /* NaN is unequal to any value */
+ if (neq)
+ ret = 1;
}
}
}
@@ -7571,7 +7574,7 @@ xmlXPathParseNameComplex(xmlXPathParserContextPtr ctxt, int qualified) {
buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar));
if (buffer == NULL) {
- XP_ERROR0(XPATH_MEMORY_ERROR);
+ XP_ERRORNULL(XPATH_MEMORY_ERROR);
}
memcpy(buffer, buf, len);
while ((IS_LETTER(c)) || (IS_DIGIT(c)) || /* test bigname.xml */
@@ -7584,7 +7587,7 @@ xmlXPathParseNameComplex(xmlXPathParserContextPtr ctxt, int qualified) {
buffer = (xmlChar *) xmlRealloc(buffer,
max * sizeof(xmlChar));
if (buffer == NULL) {
- XP_ERROR0(XPATH_MEMORY_ERROR);
+ XP_ERRORNULL(XPATH_MEMORY_ERROR);
}
}
COPY_BUF(l,buffer,len,c);
@@ -7820,7 +7823,7 @@ xmlXPathParseLiteral(xmlXPathParserContextPtr ctxt) {
while ((IS_CHAR_CH(CUR)) && (CUR != '"'))
NEXT;
if (!IS_CHAR_CH(CUR)) {
- XP_ERROR0(XPATH_UNFINISHED_LITERAL_ERROR);
+ XP_ERRORNULL(XPATH_UNFINISHED_LITERAL_ERROR);
} else {
ret = xmlStrndup(q, CUR_PTR - q);
NEXT;
@@ -7831,13 +7834,13 @@ xmlXPathParseLiteral(xmlXPathParserContextPtr ctxt) {
while ((IS_CHAR_CH(CUR)) && (CUR != '\''))
NEXT;
if (!IS_CHAR_CH(CUR)) {
- XP_ERROR0(XPATH_UNFINISHED_LITERAL_ERROR);
+ XP_ERRORNULL(XPATH_UNFINISHED_LITERAL_ERROR);
} else {
ret = xmlStrndup(q, CUR_PTR - q);
NEXT;
}
} else {
- XP_ERROR0(XPATH_START_LITERAL_ERROR);
+ XP_ERRORNULL(XPATH_START_LITERAL_ERROR);
}
return(ret);
}
@@ -7924,6 +7927,9 @@ xmlXPathCompVariableReference(xmlXPathParserContextPtr ctxt) {
PUSH_LONG_EXPR(XPATH_OP_VARIABLE, 0, 0, 0,
name, prefix);
SKIP_BLANKS;
+ if ((ctxt->context != NULL) && (ctxt->context->flags & XML_XPATH_NOVAR)) {
+ XP_ERROR(XPATH_UNDEF_VARIABLE_ERROR);
+ }
}
/**
@@ -8647,7 +8653,7 @@ xmlXPathCompNodeTest(xmlXPathParserContextPtr ctxt, xmlXPathTestVal *test,
if (name == NULL)
name = xmlXPathParseNCName(ctxt);
if (name == NULL) {
- XP_ERROR0(XPATH_EXPR_ERROR);
+ XP_ERRORNULL(XPATH_EXPR_ERROR);
}
blanks = IS_BLANK_CH(CUR);
@@ -8668,7 +8674,7 @@ xmlXPathCompNodeTest(xmlXPathParserContextPtr ctxt, xmlXPathTestVal *test,
else {
if (name != NULL)
xmlFree(name);
- XP_ERROR0(XPATH_EXPR_ERROR);
+ XP_ERRORNULL(XPATH_EXPR_ERROR);
}
*test = NODE_TEST_TYPE;
@@ -8683,7 +8689,7 @@ xmlXPathCompNodeTest(xmlXPathParserContextPtr ctxt, xmlXPathTestVal *test,
name = NULL;
if (CUR != ')') {
name = xmlXPathParseLiteral(ctxt);
- CHECK_ERROR 0;
+ CHECK_ERROR NULL;
*test = NODE_TEST_PI;
SKIP_BLANKS;
}
@@ -8691,7 +8697,7 @@ xmlXPathCompNodeTest(xmlXPathParserContextPtr ctxt, xmlXPathTestVal *test,
if (CUR != ')') {
if (name != NULL)
xmlFree(name);
- XP_ERROR0(XPATH_UNCLOSED_ERROR);
+ XP_ERRORNULL(XPATH_UNCLOSED_ERROR);
}
NEXT;
return(name);
@@ -8729,7 +8735,7 @@ xmlXPathCompNodeTest(xmlXPathParserContextPtr ctxt, xmlXPathTestVal *test,
name = xmlXPathParseNCName(ctxt);
if (name == NULL) {
- XP_ERROR0(XPATH_EXPR_ERROR);
+ XP_ERRORNULL(XPATH_EXPR_ERROR);
}
}
return(name);
@@ -8919,10 +8925,18 @@ xmlXPathCompStep(xmlXPathParserContextPtr ctxt) {
CHECK_ERROR;
+ type = (xmlXPathTypeVal) 0;
+ test = (xmlXPathTestVal) 0;
name = xmlXPathCompNodeTest(ctxt, &test, &type, &prefix, name);
if (test == 0)
return;
+ if ((prefix != NULL) && (ctxt->context != NULL) &&
+ (ctxt->context->flags & XML_XPATH_CHECKNS)) {
+ if (xmlXPathNsLookup(ctxt->context, prefix) == NULL) {
+ xmlXPathErr(ctxt, XPATH_UNDEF_PREFIX_ERROR);
+ }
+ }
#ifdef DEBUG_STEP
xmlGenericError(xmlGenericErrorContext,
"Basis : computing new set\n");
@@ -10983,7 +10997,7 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
*/
static xmlXPathObjectPtr
xmlXPathRunStreamEval(xmlXPathContextPtr ctxt, xmlPatternPtr comp) {
- int max_depth;
+ int max_depth, min_depth;
int from_root;
int ret, depth;
xmlNodePtr cur = NULL, limit = NULL;
@@ -10999,6 +11013,9 @@ xmlXPathRunStreamEval(xmlXPathContextPtr ctxt, xmlPatternPtr comp) {
return(NULL);
if (max_depth == -2)
max_depth = 10000;
+ min_depth = xmlPatternMinDepth(comp);
+ if (min_depth == -1)
+ return(NULL);
from_root = xmlPatternFromRoot(comp);
if (from_root < 0)
return(NULL);
@@ -11010,13 +11027,20 @@ xmlXPathRunStreamEval(xmlXPathContextPtr ctxt, xmlPatternPtr comp) {
if (retval == NULL)
return(NULL);
- if ((from_root) && (max_depth == 0)) {
- xmlXPathNodeSetAddUnique(retval->nodesetval, (xmlNodePtr) ctxt->doc);
- return(retval);
- } else if (max_depth == 0) {
- xmlXPathNodeSetAddUnique(retval->nodesetval, ctxt->node);
+ /*
+ * handle the special cases of / amd . being matched
+ */
+ if (min_depth == 0) {
+ if (from_root) {
+ xmlXPathNodeSetAddUnique(retval->nodesetval, (xmlNodePtr) ctxt->doc);
+ } else {
+ xmlXPathNodeSetAddUnique(retval->nodesetval, ctxt->node);
+ }
+ }
+ if (max_depth == 0) {
return(retval);
}
+
if (from_root) {
cur = (xmlNodePtr)ctxt->doc;
} else if (ctxt->node != NULL) {
@@ -11381,7 +11405,7 @@ xmlXPathCtxtCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
if( pctxt->error != XPATH_EXPRESSION_OK )
{
xmlXPathFreeParserContext(pctxt);
- return (0);
+ return(NULL);
}
if (*pctxt->cur != 0) {
diff --git a/xpointer.c b/xpointer.c
index 84c80c3..943cf21 100644
--- a/xpointer.c
+++ b/xpointer.c
@@ -2412,7 +2412,7 @@ xmlXPtrAdvanceChar(xmlNodePtr *node, int *indx, int bytes) {
if (pos + bytes >= len) {
bytes -= (len - pos);
cur = xmlXPtrAdvanceNode(cur, NULL);
- cur = 0;
+ pos = 0;
} else if (pos + bytes < len) {
pos += bytes;
*node = cur;
diff --git a/xstc/Makefile.in b/xstc/Makefile.in
index 36242b1..a435815 100644
--- a/xstc/Makefile.in
+++ b/xstc/Makefile.in
@@ -152,6 +152,7 @@ TEST_PUSH = @TEST_PUSH@
TEST_REGEXPS = @TEST_REGEXPS@
TEST_SAX = @TEST_SAX@
TEST_SCHEMAS = @TEST_SCHEMAS@
+TEST_SCHEMATRON = @TEST_SCHEMATRON@
TEST_THREADS = @TEST_THREADS@
TEST_VALID = @TEST_VALID@
TEST_VTIME = @TEST_VTIME@
@@ -187,6 +188,7 @@ WITH_REGEXPS = @WITH_REGEXPS@
WITH_RUN_DEBUG = @WITH_RUN_DEBUG@
WITH_SAX1 = @WITH_SAX1@
WITH_SCHEMAS = @WITH_SCHEMAS@
+WITH_SCHEMATRON = @WITH_SCHEMATRON@
WITH_THREADS = @WITH_THREADS@
WITH_TREE = @WITH_TREE@
WITH_TRIO = @WITH_TRIO@